String 从GPS跟踪器获取无法读取的字符串

String 从GPS跟踪器获取无法读取的字符串,string,binary,gps,hex,decoding,String,Binary,Gps,Hex,Decoding,我从GPS跟踪设备上获取了这个无法读取的字符串,我需要对这些信息进行解码,以便在我的应用程序(c#)中使用它 但事实上,我所期望的是如下所示: *HQ,XXXXXX,41,4#V1,time,A,**Lat**,N/S,**Lng**,W/E,000.00,000,date,FFFFFBFF,432,35,32448,334 如何将字符串转换为c#中的标准格式 我将数据转换为字节,如您所见: 24-41-20-20-67-72-51-30-35-41-68-40-91-29-3F-3F-3F-

我从GPS跟踪设备上获取了这个无法读取的字符串,我需要对这些信息进行解码,以便在我的应用程序(c#)中使用它

但事实上,我所期望的是如下所示:

*HQ,XXXXXX,41,4#V1,time,A,**Lat**,N/S,**Lng**,W/E,000.00,000,date,FFFFFBFF,432,35,32448,334
如何将字符串转换为c#中的标准格式

我将数据转换为字节,如您所见:

24-41-20-20-67-72-51-30-35-41-68-40-91-29-3F-3F-3F-FF-FF-FB-FF-FF-3F-3F-3F-3F-B0-23-7E-C0-82-A1-55

这完全取决于字符串最初的编码方式。但基本思想是使用具有所需参数的变换函数

您可以使用适当的编码方法

例如,如果您知道原始字符串在发送给您之前是以
UTF-8
格式编码的,您可以将其转换为字符串,如下所示:


string converted=Encoding.UTF8.GetString(bytesReceived)

这确实是一些二进制信息,如果您已经清楚地阅读了产品手册,那么它会说明二进制文件的形成

将数据转换为十六进制将得到如下结果

24-41-20-20-67-72-51-30-35-41-68-40-91-29-3F-3F-3F-FF-FF-FB-FF-FF-3F-3F-
然后你需要参考手册了解这些十六进制数的确切含义

例如--(在一些中文设备中)


**您收到这些二进制文件是因为您要求它以二进制模式发送信息。

取决于您从网络中获得的字节编码。使用适当的编码类并基于该类构造字符串。从何处获取字符串?这似乎是压缩的问题。也许你需要解压它,比如用
GzipStream
或者类似的东西。@manodestream如果我从gps获取数据,我测试了所有的编码,但它没有work@GeorgJung我从gps即avl设备获取数据,我使用ascci和utf8以及默认编码,但它不起作用-这里的文档将是您的朋友。它再次返回原始值byte[]ba=encoding.default.GetBytes($A grQ05Ah@)���ÿÿûÿÿ����“U”~U“;转换的字符串=Encoding.UTF8.GetString(ba);也使用相同的编码来获取字节。同样,只有当您知道字节数组是UTF-8数据时,您的示例才有效。您说过设备id后面的6字节是时间,51-30-35。这是什么意思?
24-41-20-20-67-72-51-30-35-41-68-40-91-29-3F-3F-3F-FF-FF-FB-FF-FF-3F-3F-
2 bytes(24),  stand for standard mode
10 bytes,  is device'ID (41 20 20 67 72)
6 bytes, is time 
6 bytes, is data
8 bytes, is latitude
2 bytes, battery like this 06= 100% 05=80% 04=60% 03=40% 02=20% 01=10%
10 bytes is  longitude