C# convert byte to hex after mode 100 and send it using serial
我需要运行模式0x100并发送十六进制消息
这是我创建的mode100函数(正在工作)
1 2 3 4 5 6 7 8 9 10 11 12 13 | public static byte Mode100(byte[] p) { byte lcs = 0; foreach (byte b in p) { lcs += b; } return lcs; } |
这是我要寄的
1 2 3 4 5 6 | 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函数返回me12(十二月)这是C(十六进制)
但如何将其转换为byte[],以便发送0x0C?
因为现在它把我的"C"改为67 dec42 hex那是错误的…..
我看过这个帖子
如何将字节数组转换为十六进制字符串,反之亦然?
但它没有帮助我得到我需要的答案
我同意@500 InternalServerError的说明,您似乎想要的是二进制值,而不是十六进制值。您的示例实际上显示了这一点——您的校验和将是0x09,这是您发送的。0x09的ASCII为两个字符,"0"和"9",在ASCII中为0x30 0x39。所以我认为你混淆了"decimal"和"hex"(二进制值到字符串的转换)和二进制值(既不是decimal也不是hex)。
要获得您似乎要查找的结果,请删除到十六进制字符串的转换:
1 2 3 4 | 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 decimal/0c hex。