我有一个树莓派,我的环境是 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。