C# 在模式 100 之后将字节转换为十六进制并使用串口发送
C# convert byte to hex after mode 100 and send it using serial
我需要 运行 模式 0x100 并发送十六进制消息
这是我创建的 mode100 函数(正在运行)
public static byte Mode100(byte[] p)
{
byte lcs = 0;
foreach (byte b in p)
{
lcs += b;
}
return lcs;
}
这就是我要发送的内容
byte[] msg = { 0X06, 0XA2, 0XD2, 0X06, 0XD3, 0X11, 0XD4, 0X65, 0X6F };
var Mode100Dec = Mode100(msg);//value in int
string Mode100hex = Mode100Dec.ToString("X"); //value in hex 0-F
byte [] Mode100Byte = Encoding.Default.GetBytes(Mode100hex);//value in dec ascci of hex
var hexString = BitConverter.ToString(Mode100Byte); //value in hex of ascii
对于此示例,Mode100 函数 return 我
12(十二月)
这是 C(Hex)
但是我如何将它转换为 byte[] 以便我可以发送 0x0C?
因为现在它将 "C" 更改为 67 Dec \ 42 Hex
这是错误的.....
我看过这个post
How do you convert a byte array to a hexadecimal string, and vice versa?
但这并没有帮助我得到我需要的答案
我同意@500-InternalServerError 的注释,您似乎想要二进制值,而不是十六进制值。您的示例实际上显示了这一点——您的校验和将是 0x09,这就是您发送的内容。 0x09 的 ASCII 将是两个字符,“0”和“9”,在 ASCII 中将是 0x30 0x39。所以我认为你混淆了 "Decimal" 和 "Hex" (它们是二进制值到字符串的转换)与二进制值(既不是十进制也不是十六进制)。
要获得您似乎正在寻找的结果,请删除对 HEX 字符串的转换:
byte[] msg = { 0X06, 0XA2, 0XD2, 0X06, 0XD3, 0X11, 0XD4, 0X65, 0X6F };
var Mode100val = Mode100(msg); //value as a BYTE
byte [] Mode100Byte = new byte[] { Mode100val};
单个字节的数组将包含单个二进制值 12 十进制/0C 十六进制。
我需要 运行 模式 0x100 并发送十六进制消息
这是我创建的 mode100 函数(正在运行)
public static byte Mode100(byte[] p)
{
byte lcs = 0;
foreach (byte b in p)
{
lcs += b;
}
return lcs;
}
这就是我要发送的内容
byte[] msg = { 0X06, 0XA2, 0XD2, 0X06, 0XD3, 0X11, 0XD4, 0X65, 0X6F };
var Mode100Dec = Mode100(msg);//value in int
string Mode100hex = Mode100Dec.ToString("X"); //value in hex 0-F
byte [] Mode100Byte = Encoding.Default.GetBytes(Mode100hex);//value in dec ascci of hex
var hexString = BitConverter.ToString(Mode100Byte); //value in hex of ascii
对于此示例,Mode100 函数 return 我 12(十二月) 这是 C(Hex)
但是我如何将它转换为 byte[] 以便我可以发送 0x0C?
因为现在它将 "C" 更改为 67 Dec \ 42 Hex 这是错误的.....
我看过这个post
How do you convert a byte array to a hexadecimal string, and vice versa?
但这并没有帮助我得到我需要的答案
我同意@500-InternalServerError 的注释,您似乎想要二进制值,而不是十六进制值。您的示例实际上显示了这一点——您的校验和将是 0x09,这就是您发送的内容。 0x09 的 ASCII 将是两个字符,“0”和“9”,在 ASCII 中将是 0x30 0x39。所以我认为你混淆了 "Decimal" 和 "Hex" (它们是二进制值到字符串的转换)与二进制值(既不是十进制也不是十六进制)。
要获得您似乎正在寻找的结果,请删除对 HEX 字符串的转换:
byte[] msg = { 0X06, 0XA2, 0XD2, 0X06, 0XD3, 0X11, 0XD4, 0X65, 0X6F };
var Mode100val = Mode100(msg); //value as a BYTE
byte [] Mode100Byte = new byte[] { Mode100val};
单个字节的数组将包含单个二进制值 12 十进制/0C 十六进制。