如何将HEX转换为人类可读的

时间:2018-01-27 15:07:52

标签: node.js hex ascii

我正在尝试从HEX转换为ASCII并且我收到此消息。我想了解如何以正确的方式解释它。

0x2b6162630704fe17

使用npm模块hex2ascii,它返回:

"+abc\u0007\u0004þ\u0017"

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

+abcþ

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

我做错了吗?

感谢帮助!

2 个答案:

答案 0 :(得分:0)

你确定它的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还是不同的编码。

答案 1 :(得分:0)

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

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

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

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

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

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

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