展亚鹏先生学JAVA 2024-09-13 20:04 采纳率: 0%
浏览 33

c#串口接收数据格式转化

串口通讯问题
其中具体代码如下:
代码解读:之前的问题是接收汉字显示乱码,我找到原因是因为之前的代码是一个字节一个字节读取,而汉字是两个字节因此会拆分汉字形成乱码,然后新代码我从串口收到数据,然后读取之后全部存到字节数组中,然后用Encoding.Default.GetString进行将字节数组转换为字符串 ,成功汉字转化成功,将汉字转化成十六进制也数据正确,但是当我接收十六进制数据的时候,数据为:C1 0C 01 01 00 11 00 0F 00 96 00 B8 0B 02 F6 45,却得不到正确的数据,开头的C1 0C显示错误,中间一些数据也显示错误,求解释

                //// 读取所有待接收的数据到字节数组中  
                //byte[] buffer = new byte[serialPort1.BytesToRead];
                //int bytesRead = serialPort1.Read(buffer, 0, buffer.Length);

                ////可接受汉字
                //if (bytesRead > 0)
                //{
                //    // 使用Default默认 编码将字节数组转换为字符串  
                //    string receivedData = Encoding.Default.GetString(buffer, 0, bytesRead);
                //    sbRX.Remove(0, sbRX.Length);
                //    // 将接收到的字符串追加到StringBuilder中  
                //    if (!isClosing)
                //    {
                //        sbRX.Append(receivedData);
                //    }
                //}

            ////要获取字节数然后一个一个取!
            //byte[] b = Encoding.GetEncoding("GB2312").GetBytes(strASCII); ;//按照指定编码将string编程字节数组

            //StringBuilder sbHex = new StringBuilder();

            //for (int i = 0; i < b.Length; i++)//逐字节变为16进制字符
            //{
            //    // 将每个字节转换为两位十六进制数,并添加空格(但不在最后一个字节后添加)  
            //    sbHex.Append(b[i].ToString("X2"));
            //        sbHex.Append(" ");
            //}
            //return sbHex.ToString();

  • 写回答

2条回答 默认 最新

  • 一轮明月照丘壑 2024-09-13 20:05
    关注

    以下回复参考:皆我百晓生券券喵儿等免费微信小程序作答:

    你的问题似乎在于如何处理接收到的十六进制数据。你提到接收到的数据是十六进制格式,但是你并没有展示你是如何处理和解析这个数据的。假设你接收到的十六进制数据是一个字节序列,并且这些数据代表了一些特定的信息(例如,它们可能代表温度、压力或其他传感器数据),你需要知道如何将这些字节解释为有意义的数据。

    一种可能的问题是,你可能没有正确地解析这些十六进制值。你可能需要将它们转换为一个字节数组,然后根据数据的具体格式进行解析。这个过程可能会依赖于你的设备和它发送的数据格式。你需要了解设备是如何编码数据的,然后使用相同的格式解析它。以下是一个简单的例子来展示如何解析十六进制字符串为字节数组:

    string hexString = "C10C01010011000F009600B80B02F645"; // 你的十六进制数据
    byte[] byteArray = HexStringToByteArray(hexString); // 将十六进制字符串转换为字节数组
    

    其中 HexStringToByteArray 的函数定义如下:

    public static byte[] HexStringToByteArray(string hexString)
    {
        if (hexString.Length % 2 != 0)
            throw new ArgumentException("Hex string must have an even number of characters.");
    
        byte[] byteArray = new byte[hexString.Length / 2];
        for (int i = 0; i < hexString.Length; i += 2)
            byteArray[i / 2] = Convert.ToByte(hexString.Substring(i, 2), 16);
        return byteArray;
    }
    

    然后你可以根据数据的具体格式解析这个字节数组。例如,如果你的设备发送的是一系列的消息包,每个消息包的格式是 起始字节 数据字节1 数据字节2 ... 结尾字节,你需要解析这个字节数组以找到这些消息包并解析它们的内容。具体的解析方式取决于你的设备和它的通信协议。

    如果你可以提供更多关于你的设备和它的通信协议的信息,我可以给出更具体的建议。

    评论

报告相同问题?

问题事件

  • 创建了问题 9月13日