C#在模式100后将字节转换为十六进制,并使用串行
我需要运行模式0x100并发送十六进制消息 这是我创建的mode100函数(正在运行) 这就是我想要发送的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
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};