将 ASCII 值数组转换为一个字符串
Posted
技术标签:
【中文标题】将 ASCII 值数组转换为一个字符串【英文标题】:Converting array of ASCII values to one string 【发布时间】:2019-11-20 09:48:14 【问题描述】:使用 Node-RED/JS 的 ASCII 值数组,我需要将所有内容转换为一个长字符串。为了处理数组中不同数量的值,我找到了 String.fromCharCode.apply(null, msg.payload);很棒,我的有效载荷按预期转换 - 或至少部分转换。
有效负载由许多布尔值和整数组成,最后是一个字符串。它输出的字符串很好,但整数和布尔值(暂时为 3 和 0)没有被转换。该数组包含 121 个 ASCII 值,但字符串输出只有约 77 个字符长。 换句话说,
[0,45,83,51,0,0,0,0,1,0,0,0,14,0,202,0,19,162,0,0,0,0,0,0,3,0,3,0,3,0,3,0,3,0,3,0,3,0,3,0,49,53,55,52,48,55,57,54,57,50,56,48,54,48,48,48,48,48,48,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,80,70,86,32,1,0,0,99,103,114,111,117,112,47,99,32,0,0,0,0,0,0,0,0,0,0,0,0,71,80,82,77,67,44,49,50,50,49,51,50,46,48,48,44,65,44,52,52,52,52,46,50,48,56,48,53,44,78,44,48,48,52,52,52,46,50,55,51,50,51,44,69,44,48,46,48,49,51,44,44,49,56,49,49,49,57,44,44,44,68,42,55,55,13,0,13,0,48,48,48,42,54,68,13,0,50,44,0,0]
被转换成类似
的东西-S3yÆ1574241874748,092421.00,A,1324.56789,N,12345.56789,E,0.024,,201119,,,D*73
虽然它会期望它像
0,0,0,0,3,3,3,3,3,3,3,3,1574241874748,092421.00,A,1324.56789,N,12345.56789,E,0.024,,201119,,,D*73
注意:-S3yÆ
不完全是开头的输出,因为里面有一些特殊字符(显示为Æ
,但我不认为它真的是,而且它也会变化并且可以' t 由剪贴板处理)。我怀疑这是需要照顾的罪魁祸首。输入中有很多空值,我怀疑这些会导致fromCharCode
问题。
【问题讨论】:
您需要了解协议以及理想情况下的文档(或能够理解协议的库),但首先您需要知道用于传输数据的协议是什么。在不了解协议的情况下,您只能对其进行逆向工程以找出如何解析数据。 【参考方案1】:您要做的是解析二进制打包数据结构。尝试一次将整个内容转换为字符串不是正确的方法。
该字符串看起来是一个 NMEA GPS 字符串,因此我建议您将类似 npm gps-module 的内容作为自定义 Node-RED 节点的起点,或者至少作为您将包含在功能节点。
【讨论】:
另见***.com/questions/5605108/… 虽然发音为“nema”,但拼写为 NMEA。但我认为 NMEA 数据包是基于 ASCII 的?这看起来是二进制的,里面有很多空值 您说得对,数据是/in part/ NMEA 字符串,但只是最后一部分。整个数据阵列源自与 GPS 接收器相连的 PLC。 PLC 还输出一些布尔值和模拟值,然后将所有内容作为 UDP 消息吐出。使用现有的 netvar-receiver 节点在某种程度上可行,但似乎有一个错误,这使得输出中不可能有两个单独的字符串值,至少在我们当前的配置中是这样。 那也看node-red-contrib-binary以上是关于将 ASCII 值数组转换为一个字符串的主要内容,如果未能解决你的问题,请参考以下文章