2012-09-21 68 views

回答

19

60 == 0x3C

你已經有了正確的答案,但你正在以錯誤的方式看待它。

0x是十六進制的前綴
3C是3×16 + 12

+0

謝謝,這是要走的路。 – DropTheCode

10

你可以使用BitConverter.ToString方法將字節數組轉換爲十六進制字符串:

string hex = BitConverter.ToString(new byte[] { Convert.ToByte('<') }); 

或者乾脆:

string hex = Convert.ToByte('<').ToString("x2"); 
+0

謝謝你,但我需要一個字節,如果轉換後我使用字節[] B = ASCIIEncoding.ASCII.GetBytes(十六進制);我得到一個51和67值的字節數組。我需要3c。 – DropTheCode

+0

如果你需要一個字節,那麼不要調用'.ToString',簡單地說:'byte b = Convert.ToByte('<');'。另外'GetBytes'方法不會做你認爲它的作用。它不期望一個十六進制字符串。它需要一個簡單的字符串,其中每個字符都使用指定的編碼轉換爲一個字節 - 它與十六進制無關。如果您想從十六進制字符串中獲取原始字節數組,請執行以下操作:http:// stackoverflow。com/a/311179/29407 –

3

你想要的數值轉換爲使用ToString("x")爲十六進制:

string asHex = b.ToString("x"); 

但是,請注意,您的代碼將「<」字符轉換爲一個字節將適用於該特定字符,但它不適用於非ANSI字符(不適合字節)。

4
char ch2 = 'Z'; 
Console.Write("{0:X} ", Convert.ToUInt32(ch2)); 
5

得到60(十進制表示),而不是3C。

不,你沒有得到任何代表。您會得到一個byte,其中包含值爲60/3c的某些內部表示。當你看它,即當你將它轉換爲一個字符串(明確用ToString()或隱含地)時,你得到十進制表示60

因此,你必須確保你明確字節轉換爲字符串,指定要的基礎。 ToString("x"),例如將一個數字轉換成十六進制表示

byte b = Convert.ToByte('<'); 
String hex = b.ToString("x"); 
相關問題