【问题标题】:How to convert HEX to human readable如何将 HEX 转换为人类可读
【发布时间】:2018-01-27 15:07:52
【问题描述】:

我正在尝试将 HEX 转换为 ASCII,我收到了这条消息。我想了解如何以正确的方式解释它。

0x2b6162630704fe17

使用 npm 模块 hex2ascii 它会返回:

"+abc\u0007\u0004þ\u0017"

如果我从 online converter 转换,它会返回:

+abcþ

有人可以帮我解释一下吗?我正在使用节点。

我做错了吗?

感谢您的帮助!

【问题讨论】:

  • "2b6162630704fe17".match (/(..)/g).reduce ((a,c) => a + String.fromCharCode(parseInt (c,16)), "") //"+abcþ"

标签: node.js hex ascii


【解决方案1】:

你确定它是 8 位 ASCII 码吗?

如果是,则每 2 个十六进制字符代表一个给定的 ASCII 数字。

所以: 2b6162630704fe17

  • 第一个 2b,即 2 * 16 + 11 = 43 - 这是一个加号
  • 61,即 6 * 16 + 1 = 97 = 小写 a
  • 62,即 6 * 16 + 2 = 98 = 小写 b
  • 63,即 6 * 16 + 3 = 99 = 小写 c
  • 07,即 0 * 16 + 7 = 7 = 这是一个特殊的不可打印字符。

将数字转换为字符的参考 - asciitable.com

基于07,不知你的数据是真的ascii,还是其他编码。

【讨论】:

  • 我实际上不确定哪种格式。设备以十六进制向我发送报告。它的文档说它使用的是 ASCII 格式,我不能这样解释。
【解决方案2】:

如果您查看控制台中的字符串,您会注意到您发布的两个字符串实际上是相同的。

要点是,字符串包含不可打印的 unicode 字符,这些字符会被 hex2ascii 模块转义。

您使用的在线转换器会尝试显示这些字符。由于它们不可打印,您根本看不到它们。

让我们转换十六进制字符串

var conv = "2b6162630704fe17".match (/(..)/g).reduce ((a,c) => a + String.fromCharCode(parseInt (c,16)), "") 
conv //"+abcþ"

它看起来就像转换器中的字符串!让我们将它与另一个字符串进行比较

conv === "+abc\u0007\u0004þ\u0017" // true

【讨论】:

  • 知道了,但我应该如何解释这个þ 标志?
  • 解释为什么?你是从哪里弄来的?你想用它做什么?这是你的数据,你应该知道你想用它做什么
猜你喜欢
  • 2010-09-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多