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

C#在模式100后将字节转换为十六进制,并使用串行,c#,hex,ascii,converter,C#,Hex,Ascii,Converter,我需要运行模式0x100并发送十六进制消息 这是我创建的mode100函数(正在运行) 这就是我想要发送的 byte[] msg = { 0X06, 0XA2, 0XD2, 0X06, 0XD3, 0X11, 0XD4, 0X65, 0X6F }; var Mode100Dec = Mode100(msg);//value in int string Mode100hex = Mode100Dec.ToString("X

我需要运行模式0x100并发送十六进制消息

这是我创建的mode100函数(正在运行)

这就是我想要发送的

            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函数返回me 12(12月) 哪个是C(十六进制)

但如何将其转换为字节[],以便发送0x0C

因为现在它把“C”改为67 Dec\42 Hex 这是错误的


我已经看过这篇文章了


但是它没有帮助我得到我需要的答案

我同意@500 InternalServerError的注释,似乎你想要的是二进制值,而不是十六进制。您的示例实际上显示了这一点——您的校验和将是0x09,这就是您发送的内容。0x09的ASCII为两个字符,“0”和“9”,在ASCII中为0x30 0x39。所以我认为你混淆了“十进制”和“十六进制”(这是二进制值到字符串的转换)和二进制值(既不是十进制也不是十六进制)

要获得您想要的结果,请删除对十六进制字符串的转换:

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

旁白:协议会要求您发送构成校验和值的十六进制字符,这听起来很不寻常。您是否应该您不应该只发送从函数中获得的二进制校验和值,并且文档中不只是为了说明目的而将值显示为十六进制?不。。。。因为如果我发送完整消息,它正在工作(如果我发送这个-0X06、0XA2、0XD2、0X06、0XD3、0X11、0XD4、0X65、0X6C、0X09,它正在工作),请注意:ASCII字符“C”是43十六进制
byte[] msg = { 0X06, 0XA2, 0XD2, 0X06, 0XD3, 0X11, 0XD4, 0X65, 0X6F };

var Mode100val = Mode100(msg);  //value as a BYTE
byte [] Mode100Byte = new byte[] { Mode100val};