簡體   English   中英

將十六進制字符串字節轉換為字節數組

[英]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);

預期輸出示例

  1. 輸入=> 0x89,輸出=> {0x38,0x39}
  2. 輸入=> 0xA3,輸出=> {0x3A,0x33}

但是,如果我使用上面的代碼,則會得到以下輸出

  1. 輸入=> 0x89,輸出=> {0x38,0x39}
  2. 輸入=> 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM