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 十六进制。