【问题标题】:How do I convert the decimal value in hex string and hex string and hex string to byte如何将十六进制字符串和十六进制字符串和十六进制字符串中的十进制值转换为字节
【发布时间】:2019-07-27 16:58:01
【问题描述】:

我有十进制值的字节数组,如[0, 4, 20, 141],我希望将其转换为[0x00, 0x04, 0x14, 0x8D],我需要将此数组用作字节以添加到缓冲区中

当前数据:

byte[] packet = new byte[4];

packet[0] = 0;
packet[1] = 4;
packet[2] = 20;
packet[3] = 141;

预计发送到串口的数据如下:

byte[] mBuffer = new byte[4];

mBuffer[0] = 0x02;
mBuffer[1] = 0x04;
mBuffer[2] = 0x14;
mBuffer[3] = 0x8D;

试过了:

Convert.ToByte(string.Format("{0:X}", packet[0]));

但是抛出异常:

输入字符串的格式不正确。

【问题讨论】:

  • 这个packet[0] 来自哪里?
  • @er-sho 我正在从 .bin 文件中读取字节,并将 16-16 字节的十进制值切片,但我想像这样将它作为 0x00 传递
  • 非常不清楚您要做什么...您从 4 字节数组开始...您想将其转换为 4 字节数组...您想将其转换为一些字符串和然后回到大概 4 个字节的数组。也许显示期望的结果可以阐明您想要实现的目标......
  • @AlexeiLevenkov 对不起,我也是新手:)更新了问题!
  • 我提供了一个可能会有所帮助的答案,但是当数字已经相等时,您尝试进行此转换似乎很奇怪 - 只是格式不同

标签: c# hex byte


【解决方案1】:

您遇到了异常,因为您试图替换字符串中没有“$”前缀的变量。试试这个:

// Converts integer 141 to string "8D"
String parsed = String.Format($"{0:X}", packet[3]);  

然后,您应该可以使用以下方法转换为字节:

// Parses string "8D" as a hex number, resulting in byte 0x8D (which is 141 in decimal)
Byte asByte = Byte.Parse(parsed, NumberStyles.HexNumber); 

【讨论】:

  • 当我将它用于 int 141 它给我 0 作为字节
  • 你是说如果我通过141 而不是8d 并且会起作用吗?
  • 我已经更新了我的答案,以帮助解释每个变量在每个步骤中代表什么类型/值
  • 感谢您的帮助,但在asByte 变量中仍然得到0 fiddle
  • 卡在这个:我有141 我想把它转换成0x8D
猜你喜欢
  • 2018-01-22
  • 2017-08-23
  • 2020-11-07
  • 2018-01-31
  • 2013-02-07
  • 1970-01-01
  • 1970-01-01
  • 2014-03-19
相关资源
最近更新 更多