String.Format untuk Hex

Dengan kode di bawah ini, pewarnaan selalu menghasilkan #DDDD. Nilai Hijau, Merah, dan Spasi di dalamnya Bagaimana cara memperbaikinya?

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 sumber
comment
Dan bukankah seharusnya Red, Green, Blue untuk string warna RGB Hex?   -  person mellamokb    schedule 23.07.2012
comment
@mellamokb Kemungkinan berada dalam urutan byte yang berbeda.   -  person Joel Day    schedule 26.11.2017


Jawaban (5)


Angka 0 di {0:X} mengacu pada posisi dalam daftar atau argumen. Dalam hal ini 0 berarti menggunakan nilai pertama yaitu Blue. Gunakan {1:X} untuk argumen kedua (Green), dan seterusnya.

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

Sintaks untuk parameter format dijelaskan dalam dokumentasi:

Sintaks Item Format

Setiap item format mengambil bentuk berikut dan terdiri dari komponen-komponen berikut:

{ index[,alignment][:formatString]}

Diperlukan kurung kurawal yang cocok ({ dan }).

Komponen Indeks

Komponen indeks wajib, juga disebut penentu parameter, adalah angka yang dimulai dari 0 yang mengidentifikasi item terkait dalam daftar objek. Artinya, item format yang penentu parameternya adalah 0 memformat objek pertama dalam daftar, item format yang penentu parameternya adalah 1 memformat objek kedua dalam daftar, dan seterusnya.

Beberapa item format dapat merujuk ke elemen yang sama dalam daftar objek dengan menentukan penentu parameter yang sama. Misalnya, Anda dapat memformat nilai numerik yang sama dalam format heksadesimal, ilmiah, dan angka dengan menentukan string format gabungan seperti ini: {0:X} {0:E} {0:N}.

Setiap item format dapat merujuk ke objek apa pun dalam daftar. Misalnya, jika ada tiga objek, Anda dapat memformat objek kedua, pertama, dan ketiga dengan menentukan string format gabungan seperti ini: {1} {0} {2}. Objek yang tidak direferensikan oleh item format akan diabaikan. Pengecualian waktu proses terjadi jika penentu parameter menunjuk item di luar batas daftar objek.

Komponen Penyelarasan

Komponen penyelarasan opsional adalah bilangan bulat bertanda yang menunjukkan lebar bidang format yang diinginkan. Jika nilai perataan kurang dari panjang string yang diformat, perataan diabaikan dan panjang string yang diformat digunakan sebagai lebar bidang. Data yang diformat pada kolom adalah rata kanan jika rata positif dan rata kiri jika rata negatif. Jika padding diperlukan, spasi digunakan. Koma diperlukan jika perataan ditentukan.

Memformat Komponen String

Komponen opsional formatString adalah string format yang sesuai untuk tipe objek yang diformat. Tentukan string format numerik standar atau kustom jika objek terkait adalah nilai numerik, string format tanggal dan waktu standar atau kustom jika objek terkait adalah objek DateTime, atau string format enumerasi jika objek terkait adalah nilai enumerasi. Jika formatString tidak ditentukan, penentu format umum (G) untuk tipe numerik, tanggal dan waktu, atau enumerasi digunakan. Titik dua diperlukan jika formatString ditentukan.

Perhatikan bahwa dalam kasus Anda, Anda hanya memiliki indeks dan string format. Anda belum menentukan (dan tidak memerlukan) komponen penyelarasan.

person Mark Byers    schedule 23.07.2012
comment
Atau Anda bisa mendapatkan Int32 penuh warnanya dan menuliskannya sebagai {0:X6} (atau {0:X8} jika nilai alfa berarti bagi Anda). - person BrainSlugs83; 16.09.2015

Anda juga dapat mengisi karakter yang tersisa dengan memasukkan angka setelah X, seperti ini: string.format("0x{0:X8}", string_to_modify), sehingga menghasilkan "0x00000C20".

person JGeerWM    schedule 02.08.2013
comment
Milik saya tidak pad 8 - person tofutim; 23.03.2016
comment
Saya harus melakukan ({0}, value.ToString(X8)) - person tofutim; 23.03.2016

Terjemahkan warna UInt32 Value ke CSS di .NET

Saya tahu pertanyaannya berlaku untuk 3 nilai input (red green blue). Tapi mungkin ada situasi di mana Anda sudah memiliki 32bit Value. Sepertinya Anda ingin mengirim data ke beberapa penyaji HTML CSS (karena format #HEX). Sebenarnya CSS ingin Anda mencetak 6 atau setidaknya 3 digit hex yang diisi nol di sini. jadi #{0:X06} atau #{0:X03} akan diperlukan. Karena beberapa perilaku aneh, ini selalu mencetak 8 digit, bukan 6.

Selesaikan ini dengan:

String.Format("#{0:X02}{1:X02}{2:X02}", (Value & 0x00FF0000) >> 16, (Value & 0x0000FF00) >> 8, (Value & 0x000000FF) >> 0)
person mschmoock    schedule 03.10.2013
comment
Mungkinkah perilaku aneh yang Anda sebutkan ini mencoba mewakili nilai alfa warna sebagai byte lain? - person Azendale; 02.05.2015

Secara lebih umum.

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
Dalam .NET 3.5 fromat specifier X2 memberikan pengecualian: Format String hanya boleh G, g, X, x, F, f, D atau d. Dalam versi .NET yang lebih tinggi, format lain tersedia. Lihat di sini: msdn.microsoft.com/en- kami/perpustakaan/dwhawy9k(v=vs.85).aspx - person Sold Out; 22.03.2016

Jika kami memiliki fungsi bawaan untuk mengonversi nilai integer Anda menjadi COLOR, maka mengapa perlu khawatir.

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

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