C#在模式100之后将字节转换为十六进制,并使用串行发送

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。