首页 > 解决方案 > 如何将十六进制字符串和十六进制字符串和十六进制字符串中的十进制值转换为字节

问题描述

我有十进制值的字节数组,[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]));

但是抛出一个异常:

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

标签: c#hexbyte

解决方案


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

// 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); 

推荐阅读