gpt4 book ai didi

c# - 用于解析 C# 的十六进制串行输入

转载 作者:行者123 更新时间:2023-11-30 14:56:39 26 4
gpt4 key购买 nike

我有一个树莓派,我的环境是 C#。基本上我通过无线设备发送 GPS (GPRMC) 数据。 Rx 无线设备读取数据并去除不必要的信息。 Tx 端正在发送 GPRMC 消息(我使用的是 bray 终端)

$24GPRMC,123123.00,A,2753.13285,N,08232.29411,W,0.021,,011113,,,D*6D

当我在 RPi 上使用 CuteCom 时,我得到了这个:

\0xaa\0x02G\0xf0y\0x7fE,\0x12 \0xc6\0x00\0xa1-\0xcfU

常规(十六进制输出框未选中)

或十六进制(选中十六进制输出框时):

aa 02 47 f0 79 7f 45 2c   12 20 c6 00 a1 2d cf 55 

十六进制是预期的消息,因为它具有我需要的所有相关数据(开始、ID、日期、纬度、经度、lrc、结束)。

我已经设置了我的 C# 代码来读取串行数据,但似乎无法让它以那种方式显示数据。

这是我目前在 C# 中的内容:

        public static void Main ()
{
SerialPort serial = new SerialPort ("/dev/ttyUSB0", 115200);
serial.Open ();


while (true)
{
string data = ReadData(serial);

if(!string.IsNullOrEmpty(data))
{
Console.WriteLine(data);

}
}
}

public static string ReadData (SerialPort serial)
{
string rxString = "";

rxString += serial.ReadExisting();

return rxString;
}

对于我得到的输出:

?G?yE, ??-?U

我也尝试过流阅读器,但那不起作用:

    public static string ReadData2 (System.IO.Stream s)
{

StreamReader sr = new StreamReader (s);
DataString = sr.ReadLine ();

return DataString;
}

我也尝试过使用我在另一篇文章中找到的位转换器。

    private static string ReadData3 (SerialPort serial)
{
GPSrxString += serial.ReadExisting();
string GPSrxStringhex = BitConverter.ToString(Encoding.ASCII.GetBytes(GPSrxString));

return GPSrxString;
}

所以在这一切之后,我被困住了。我哪里做错了。我需要做什么才能获得正确/所需的十六进制输出?

编辑:我在这里使用了字符串,但我最终发现字符串不是可行的方法,这是不必要的。使用数组来保存所有值并从那里开始。您可以在下面的答案中计算所需的数字,例如 UTC。

最佳答案

看起来数据是二进制的,但您的 ReadData 实现将其视为 ASCII 字符串(因此出现奇怪的字符)。尝试读取二进制数据,然后将其转换为十六进制值的字符串表示形式:

public static string ReadData(SerialPort serial)
{
byte[] buffer = new byte[serial.BytesToRead];
serial.Read(buffer, 0, buffer.Length);

StringBuilder sb = new StringBuilder();
for (int i = 0; i < buffer.Length; i++)
sb.AppendFormat("{0:X2} ", buffer[i]);

return sb.ToString();
}

关于c# - 用于解析 C# 的十六进制串行输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22355593/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com