這似乎是一個簡單的問題,但我無法弄清楚。C#將字符轉換爲字節(十六進制表示)
我需要這個角色<轉換成字節(十六進制表示),但如果我使用
byte b = Convert.ToByte('<');
我得到(十進制表示),而不是3C。
這似乎是一個簡單的問題,但我無法弄清楚。C#將字符轉換爲字節(十六進制表示)
我需要這個角色<轉換成字節(十六進制表示),但如果我使用
byte b = Convert.ToByte('<');
我得到(十進制表示),而不是3C。
60 == 0x3C
。
你已經有了正確的答案,但你正在以錯誤的方式看待它。
0x
是十六進制的前綴
3C
是3×16 + 12
你可以使用BitConverter.ToString
方法將字節數組轉換爲十六進制字符串:
string hex = BitConverter.ToString(new byte[] { Convert.ToByte('<') });
或者乾脆:
string hex = Convert.ToByte('<').ToString("x2");
謝謝你,但我需要一個字節,如果轉換後我使用字節[] B = ASCIIEncoding.ASCII.GetBytes(十六進制);我得到一個51和67值的字節數組。我需要3c。 – DropTheCode
如果你需要一個字節,那麼不要調用'.ToString',簡單地說:'byte b = Convert.ToByte('<');'。另外'GetBytes'方法不會做你認爲它的作用。它不期望一個十六進制字符串。它需要一個簡單的字符串,其中每個字符都使用指定的編碼轉換爲一個字節 - 它與十六進制無關。如果您想從十六進制字符串中獲取原始字節數組,請執行以下操作:http:// stackoverflow。com/a/311179/29407 –
你想要的數值轉換爲使用ToString("x")
爲十六進制:
string asHex = b.ToString("x");
但是,請注意,您的代碼將「<」字符轉換爲一個字節將適用於該特定字符,但它不適用於非ANSI字符(不適合字節)。
char ch2 = 'Z';
Console.Write("{0:X} ", Convert.ToUInt32(ch2));
得到60(十進制表示),而不是3C。
不,你沒有得到任何代表。您會得到一個byte
,其中包含值爲60/3c的某些內部表示。當你看它,即當你將它轉換爲一個字符串(明確用ToString()
或隱含地)時,你得到十進制表示60。
因此,你必須確保你明確字節轉換爲字符串,指定要的基礎。 ToString("x")
,例如將一個數字轉換成十六進制表示:
byte b = Convert.ToByte('<');
String hex = b.ToString("x");
謝謝,這是要走的路。 – DropTheCode