所以我试图发送一些带有十六进制值的字节以在串行端口的另一侧设置我的微控制器。问题是我不太确定如何正确执行此操作以及以哪种格式发送它们。例如,我需要发送两个字节,它们的十六进制值为57
和B0
。当我尝试将其作为char数组发送并读回时,我总是得到53
之类的字符的ASCII十六进制值,然后是55
之类的57
。所以我想将十六进制值格式化为一个字节,然后从字节数组中同时发送两个值,但是读取响应时什么也没得到。将其格式化为字节后,MessageBox将显示其十进制值,我不知道它是否应该像这样。我在下面提供我的代码。
Info_Byte_Dec += Protocol_Set + Protocol_Unit + Protocol_Write + Protocol_Settings; //stores decimal value
Data_Byte_Dec = Mode * Protocol_Mode_Offset + ODR * Protocol_ODR_Offset + Scale; //stores decimal value
Info_Byte_Hex = Info_Byte_Dec.ToString("X"); //convert to hex value
Data_Byte_Hex = Data_Byte_Dec.ToString("X"); //convert to hex value
string Merged = $"{Info_Byte_Hex} {Data_Byte_Hex}";
MessageBox.Show("Merged1: " + Merged);
byte[] Mergedbytes = Merged.Split(' ').Select(s => Convert.ToByte(s, 16)).ToArray();
MessageBox.Show("Merged2: " + Mergedbytes[0] + Mergedbytes[1]);
port.Write(Mergedbytes, 0, 2);
我不确定是否应该只发送十进制值87
,还是将其格式化为57
十六进制值,甚至格式化为0x57
。
答案 0 :(得分:1)
通常在微控制器领域中,当您使用十六进制时,您指的是实际字节,十六进制只是一种方便的表示法,用于写入二进制字节值,它通常从不意味着发送ascii十六进制值。话虽如此,没有规则,有时人们会使用实际的ASCII十六进制。
在您的情况下,如果您在stm32上使用0x57
,则可能意味着您使用的是字节文字,而不是ascii表示形式。您将需要做一些额外的工作才能将0x57转换为字符串。
因此,这意味着在C#中仅发送字节,而不是当前的ascii十六进制