繁体   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