String.Format สำหรับ Hex

ด้วยโค้ดด้านล่าง การใส่สีจะให้ #DDDD เสมอ ค่าสีเขียว สีแดง และช่องว่าง จะแก้ไขได้อย่างไร

string colorstring;
int Blue = 13;
int Green = 0;
int Red = 0;
int Space = 14;
colorstring = String.Format("#{0:X}{0:X}{0:X}{0:X}", Blue, Green, Red, Space);

person codematrix    schedule 23.07.2012    source แหล่งที่มา
comment
และไม่ควรเป็น Red, Green, Blue สำหรับสตริงสี RGB Hex ใช่หรือไม่   -  person mellamokb    schedule 23.07.2012
comment
@mellamokb มีแนวโน้มที่จะอยู่ในลำดับไบต์อื่น   -  person Joel Day    schedule 26.11.2017


คำตอบ (5)


หมายเลข 0 ใน {0:X} หมายถึงตำแหน่งในรายการหรืออาร์กิวเมนต์ ในกรณีนี้ 0 หมายถึงใช้ค่าแรกซึ่งก็คือ Blue ใช้ {1:X} สำหรับอาร์กิวเมนต์ที่สอง (Green) และต่อๆ ไป

colorstring = String.Format("#{0:X}{1:X}{2:X}{3:X}", Blue, Green, Red, Space);

ไวยากรณ์สำหรับพารามิเตอร์รูปแบบอธิบายไว้ในเอกสารประกอบ:

จัดรูปแบบไวยากรณ์รายการ

แต่ละรายการรูปแบบใช้แบบฟอร์มต่อไปนี้และประกอบด้วยส่วนประกอบต่อไปนี้:

{ index[,alignment][:formatString]}

ต้องมีเครื่องหมายปีกกาที่ตรงกัน ({ และ })

ส่วนประกอบดัชนี

ส่วนประกอบดัชนีบังคับ หรือที่เรียกว่าตัวระบุพารามิเตอร์ คือตัวเลขที่เริ่มต้นจาก 0 ที่ระบุรายการที่เกี่ยวข้องในรายการของออบเจ็กต์ นั่นคือ รายการรูปแบบที่มีตัวระบุพารามิเตอร์เป็น 0 จะจัดรูปแบบออบเจ็กต์แรกในรายการ รายการรูปแบบที่มีตัวระบุพารามิเตอร์เป็น 1 จะจัดรูปแบบออบเจ็กต์ที่สองในรายการ และอื่นๆ

รายการที่มีรูปแบบหลายรายการสามารถอ้างถึงองค์ประกอบเดียวกันในรายการออบเจ็กต์โดยการระบุตัวระบุพารามิเตอร์เดียวกัน ตัวอย่างเช่น คุณสามารถจัดรูปแบบค่าตัวเลขเดียวกันในรูปแบบเลขฐานสิบหก วิทยาศาสตร์ และตัวเลขได้โดยการระบุสตริงรูปแบบผสมดังนี้: {0:X} {0:E} {0:N}

แต่ละรายการรูปแบบสามารถอ้างอิงถึงวัตถุใดๆ ในรายการได้ ตัวอย่างเช่น หากมีสามอ็อบเจ็กต์ คุณสามารถจัดรูปแบบอ็อบเจ็กต์ที่สอง แรก และสามได้โดยการระบุสตริงรูปแบบผสมดังนี้: {1} {0} {2} วัตถุที่ไม่ได้อ้างอิงโดยรายการรูปแบบจะถูกละเว้น ข้อยกเว้นรันไทม์จะส่งผลหากตัวระบุพารามิเตอร์กำหนดรายการนอกขอบเขตของรายการออบเจ็กต์

องค์ประกอบการจัดตำแหน่ง

องค์ประกอบการจัดตำแหน่งที่เป็นตัวเลือกคือจำนวนเต็มที่มีเครื่องหมายซึ่งระบุความกว้างของฟิลด์ที่จัดรูปแบบที่ต้องการ หากค่าของการจัดตำแหน่งน้อยกว่าความยาวของสตริงที่จัดรูปแบบ การจัดตำแหน่งจะถูกละเว้นและความยาวของสตริงที่จัดรูปแบบจะถูกใช้เป็นความกว้างของฟิลด์ ข้อมูลที่จัดรูปแบบในเขตข้อมูลจะถูกจัดชิดขวาหากการจัดตำแหน่งเป็นบวก และจัดชิดซ้ายหากการจัดตำแหน่งเป็นลบ หากจำเป็นต้องรองพื้น ให้ใช้ช่องว่าง จำเป็นต้องมีเครื่องหมายจุลภาคหากระบุการจัดตำแหน่ง

จัดรูปแบบองค์ประกอบสตริง

คอมโพเนนต์ formatString ที่เป็นตัวเลือกคือสตริงรูปแบบที่เหมาะสมสำหรับประเภทของออบเจ็กต์ที่กำลังจัดรูปแบบ ระบุสตริงรูปแบบตัวเลขมาตรฐานหรือแบบกำหนดเองหากออบเจ็กต์ที่เกี่ยวข้องเป็นค่าตัวเลข สตริงรูปแบบวันที่และเวลามาตรฐานหรือแบบกำหนดเองหากออบเจ็กต์ที่สอดคล้องกันคือออบเจ็กต์ DateTime หรือสตริงรูปแบบการแจงนับหากออบเจ็กต์ที่เกี่ยวข้องเป็นค่าการแจงนับ หากไม่ได้ระบุ formatString จะใช้ตัวระบุรูปแบบทั่วไป (G) สำหรับตัวเลข วันที่และเวลา หรือประเภทการแจงนับ จำเป็นต้องมีเครื่องหมายทวิภาคหากระบุ formatString

โปรดทราบว่าในกรณีของคุณ คุณจะมีเพียงดัชนีและสตริงรูปแบบเท่านั้น คุณยังไม่ได้ระบุ (และไม่จำเป็นต้อง) องค์ประกอบการจัดตำแหน่ง

person Mark Byers    schedule 23.07.2012
comment
หรือคุณสามารถหาสี Int32 ให้เต็มแล้วเขียนเป็น {0:X6} (หรือ {0:X8} หากค่าอัลฟ่ามีความหมายต่อคุณ) - person BrainSlugs83; 16.09.2015

คุณยังสามารถวางอักขระที่เหลือโดยการใส่ตัวเลขตามหลัง X เช่น: string.format("0x{0:X8}", string_to_modify) ซึ่งให้ผลลัพธ์ "0x00000C20"

person JGeerWM    schedule 02.08.2013
comment
ของผมไม่ใช่แพด 8 - person tofutim; 23.03.2016
comment
ฉันต้องทำ ({0}, value.ToString(X8)) - person tofutim; 23.03.2016

แปลสี UInt32 ที่แต่งแล้ว Value เป็น CSS ใน .NET

ฉันรู้ว่าคำถามนี้ใช้กับค่าอินพุต 3 ค่า (red green blue) แต่อาจมีสถานการณ์ที่คุณมี 32 บิต Value ที่แต่งไว้แล้ว ดูเหมือนว่าคุณต้องการส่งข้อมูลไปยังตัวเรนเดอร์ HTML CSS บางตัว (เนื่องจากรูปแบบ #HEX) จริงๆ แล้ว CSS ต้องการให้คุณพิมพ์เลขฐานสิบหกที่เติมศูนย์ 6 หลักหรืออย่างน้อย 3 หลักที่นี่ ดังนั้นจึงต้องระบุ #{0:X06} หรือ #{0:X03} เนื่องจากพฤติกรรมแปลก ๆ สิ่งนี้จะพิมพ์ตัวเลข 8 หลักแทนที่จะเป็น 6 เสมอ

แก้ไขปัญหานี้โดย:

String.Format("#{0:X02}{1:X02}{2:X02}", (Value & 0x00FF0000) >> 16, (Value & 0x0000FF00) >> 8, (Value & 0x000000FF) >> 0)
person mschmoock    schedule 03.10.2013
comment
พฤติกรรมแปลก ๆ ที่คุณพูดถึงอาจเป็นการพยายามแสดงค่าอัลฟ่าของสีเป็นไบต์อื่นหรือไม่ - person Azendale; 02.05.2015

ให้เป็นปกติมากกว่านี้.

byte[] buf = new byte[] { 123, 2, 233 };

string s = String.Concat(buf.Select(b => b.ToString("X2")));
person Luke Puplett    schedule 30.07.2015
comment
ใน .NET 3.5 fromat specifier X2 ใช้ข้อยกเว้น: สตริงรูปแบบสามารถเป็นได้เฉพาะ G, g, X, x, F, f, D หรือ d ในเวอร์ชัน .NET ที่สูงกว่า การจัดรูปแบบอื่นๆ จะสามารถใช้ได้ ดูที่นี่: msdn.microsoft.com/en- เรา/library/dwhawy9k(v=vs.85).aspx - person Sold Out; 22.03.2016

หากเรามีฟังก์ชันในตัวเพื่อแปลงค่าจำนวนเต็มของคุณเป็น COLOR แล้วทำไมต้องกังวล

string hexValue = string.Format("{0:X}", intColor);

Color brushes = System.Drawing.ColorTranslator.FromHtml("#"+hexValue);
person Pranjal Jain    schedule 13.12.2014