【问题标题】:How to convert ASCII characters to readable value in Javascript如何在Javascript中将ASCII字符转换为可读值
【发布时间】:2019-07-10 06:04:37
【问题描述】:

我已经接收到 GPS 设备的 ASCII 字符,但我可以理解如何将数据读取为 ASCII 字符。

我收到过这样的数据

+RESP:GTFRI,EF8019,866425032153324,ZK105,,,,,0,0000000000000000,1,0.0,21,29.5,120.101247,30.344809,20190710013252,,0460,0000,580C,8500,31&0,1,42,0,36638,0,0,0,0,1,,0.0&0.0&0.0&0.0&0&0&0&030015&D50052&0&0&00000000000000000000,49,20190710013252,6D1F$

【问题讨论】:

  • 我不明白这句话:“读取数据到 ASCII 字符。”你的意思是如何解码它们?
  • 这里面是ASCII字符。
  • 你粘贴的数据好像不是ASCII,ASCII Table
  • 你有什么型号的 GPS 设备?每个模型为同一位置生成不同的字符串
  • 都是ASCII字符!

标签: javascript ascii ascii-art


【解决方案1】:

这不是 JavaScript 问题。你有字符串:

+RESP:GTFRI,EF8019,866425032153324,ZK105,,,,,0,0000000000000000,1,0.0,21,29.5,120.101247,30.344809,20190710013252,,0460,0000,580C,8500,31&0,1,42,0,36638,0,0,0,0,1,,0.0&0.0&0.0&0.0&0&0&0&030015&D50052&0&0&00000000000000000000,49,20190710013252,6D1F$

.. 从字面上看,人类可读的值。也就是说,人类能读懂的字符串字面意思是以+RESP..开头,以$结尾。

你的问题是你不明白这个字符串是什么意思,不知道如何在屏幕上显示它。

当遇到这样的事情时,我个人的调试过程是使用http://www.google.com。谷歌搜索字符串 +RESP:GTFRI 给我一个 PDF 文档作为第一个结果。它是 Track Air Interface Protocol 的文档,该协议是名为 Enduro Pro 的 GPS 设备使用的协议。

此链接可能不会永远存在,但现在可以在以下位置找到该文档:http://www.trackingtheworld.com/wt_products/wtenduropro/Documents/Enduro_Pro_Tracker_Air_Interface_Protocol_1.04.pdf

+RESP:GTFRI 数据包的文档可以在第 39 页找到。

看起来它使用AT 命令(串行协议的格式),其中发送到设备的命令以AT+<command> 开头,响应以+RESP:<command> 开头。因此数据包对GTFRI 命令(数据类型)的回复进行编码,该命令是配置计划报告的命令(第 19 页)。

每当您遇到一种新的AT 命令时,都值得在谷歌上搜索前几个字符(命令词)。我从未使用过此设备,对此一无所知,但我从谷歌搜索 +RESP:GTFRI 获得了以上所有信息。

理想情况下,由于您可能实际上可以访问该设备,因此您还应该拥有文档的副本。但我在这个行业已经足够长的时间了,我知道情况并非总是如此。

【讨论】:

  • 请注意,此协议不是标准 GPS 协议,但这是正常的。 GPS 的标准是 NMEA,但几乎所有非军事制造商也实现了自己的协议,例如 Garmin、Trimble 等
【解决方案2】:

你的问题是矛盾的:

How to convert ASCII characters to readable value

ASCII 字符被发明为可读值,代表数字(ASCII 码),代表字节......

也许你的意思是 ASCII 码。在这种情况下,在javascript 中,您可以使用以下命令将 ASCII 代码转换为其相关字符:

String.fromCharCode(code)

但老实说,我认为您的问题与 ASCII 无关。您需要的是有关 GPS 响应格式的信息,这些信息不可避免地应该记录在某处。

【讨论】:

    【解决方案3】:

    您可以使用 fromCharCode() 方法来执行您想要的任务。只需将所有 ascii 值包装到一个数组中并在函数中传递它

    const arr = [] //all your ascii codes go here
    const values = [""] //all your converted data will come here
    arr.forEach(function(val){
      values.push(string.fromCharCode(val));
     });
    

    【讨论】:

      【解决方案4】:

      检查 fromCharCode() 函数 示例:

          function myFunction() {
                  var res = String.fromCharCode(72, 69, 76, 76, 79);
                 document.getElementById("demo").innerHTML = res;
          }
      

      结果:你好

      【讨论】:

      • 它在我的情况下不起作用。我的 ascii 节点是这样的 - +RESP:GTFRI,EF8019,866425032153324,ZK105,,,,,0,0000000000000000,1,0.0,21,29.5,120.101247,30.344809,20190710013252,50,04680,0030,50,04680,003 ,1,42,0,36638,0,0,0,0,1,,0.0&0.0&0.0&0.0&0&0&0&030015&D50052&0&0&00000000000000000000,49,20190710013252,6D1F$
      【解决方案5】:

      我建议你用逗号“,”分割文本以获得一个字符串数组,然后访问 GPS 文本的每个部分。我不是 GPS 专家,但我猜用逗号分隔的每个部分都代表了一些东西。

      例子:

      // store the values coming from gps to some variable
      var gpsText = "+RESP:GTFRI,EF8019,866425032153324,ZK105,,,,,0,0000000000000000,1,0.0,21,29.5,120.101247,30.344809,20190710013252,,0460,0000,580C,8500,31&0,1,42,0,36638,0,0,0,0,1,,0.0&0.0&0.0&0.0&0&0&0&030015&D50052&0&0&00000000000000000000,49,20190710013252,6D1F$";
      // Now split it:
      var gpsParts = gpsText.split(',');
      

      这应该给你一个包含以下项目的数组:

      0: "+RESP:GTFRI"
      1: "EF8019"
      2: "866425032153324"
      3: "ZK105"
      4: ""
      5: ""
      6: ""
      7: ""
      8: "0"
      9: "0000000000000000"
      10: "1"
      11: "0.0"
      12: "21"
      13: "29.5"
      14: "120.101247"
      15: "30.344809"
      16: "20190710013252"
      17: ""
      18: "0460"
      19: "0000"
      20: "580C"
      21: "8500"
      22: "31&0"
      23: "1"
      24: "42"
      25: "0"
      26: "36638"
      27: "0"
      28: "0"
      29: "0"
      30: "0"
      31: "1"
      32: ""
      33: "0.0&0.0&0.0&0.0&0&0&0&030015&D50052&0&0&00000000000000000000"
      34: "49"
      35: "20190710013252"
      36: "6D1F$"
      

      现在,您需要了解这 37 个部分中的每一个部分的含义,并且可能会进一步将第 33 个部分用与号 (&) 分开,例如:

      var a = gpsParts[33].split('&');
      

      接下来,您需要了解上述数组a 中的每一项的含义。

      希望这会有所帮助。

      【讨论】:

      • 如果我知道投反对票的原因会很有帮助:(
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-07-11
      • 2010-09-10
      • 2010-12-07
      • 2021-06-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多