[英]Convert hexadecimal string byte into byte array
我正在構建一個客戶端應用程序,該應用程序需要以特定格式將數據包發送到服務器,以便如果字節為0xA3,則服務器期望它為{0x3A,0x33}
我之前使用過以下方法。 如果該字節是例如0x89,則效果很好。 但是,如果字節是0xA3,它將不起作用
string hex = hexStr .Length == 1 ? "0" + hexStr:hexStr ;
byte packet1 = (byte)(int.Parse(hex[0].ToString(), System.Globalization.NumberStyles.HexNumber) + 0x30);
byte packet2 = (byte)(int.Parse(hex[1].ToString(), System.Globalization.NumberStyles.HexNumber) + 0x30);
預期輸出示例
- 輸入=> 0x89,輸出=> {0x38,0x39}
- 輸入=> 0xA3,輸出=> {0x3A,0x33}
但是,如果我使用上面的代碼,則會得到以下輸出
- 輸入=> 0x89,輸出=> {0x38,0x39}
- 輸入=> 0xA3,輸出=> {0x41,0x33}
問題不在您顯示的代碼中。
您需要使用十六進制進行所有數學運算,並將字符串(如果需要)也轉換為十六進制:
string hex = "A3";
byte packet1 = (byte)(int.Parse(hex[0].ToString(), NumberStyles.HexNumber) + 0x30);
byte packet2 = (byte)(int.Parse(hex[1].ToString(), NumberStyles.HexNumber) + 0x30);
Console.WriteLine("{0:X2}, {1:X2}", packet1, packet2); // 3A, 33
完全按照您的預期工作。
您得到的結果似乎表明您使用了30
(十進制),加上了0xA
(11),並以十進制而不是十六進制打印。 在您發布的代碼中不會發生這種情況,因此只需修正您的實際代碼即可。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.