JavaScript hex2bin实现

时间:2018-12-01 21:04:18

标签: javascript php

我试图实现PHP hex2bin的JS类似物。我在JS中找到了hex2bin的几个版本,但是所有这些都显示相同的结果,这与PHP结果不同。

例如,字符串440EF96DB9A2225C32E031659DF2608B49932F0D8AFAC46F74FA56FF3E1AE952如下所示:

enter image description here

如我所见,结果非常相似,但仍然不同。有什么问题吗?

1 个答案:

答案 0 :(得分:2)

没有错。结果相同,但是字符串的显示方式不同。 PHP和JavaScript输出某些字符的方式有所不同。以代码点为249的字符为例:

echo chr(249);
// Equivalent to 
echo hex2bin("F9");

输出为“ ...”。

在JavaScript中,相同字符的输出为“ù”:

console.log(String.fromCharCode(249));

其他字符可能在一个中根本看不到,但在另一个中可见。两种语言的内部字符编码不同,这也可能在字符串渲染中起作用。

如果要确保它们相同,请以base64编码表示hex2bin输出:

在PHP(base64_encode)中:

base64_encode(hex2bin("440EF96DB9A2225C32E031659DF2608B49932F0D8AFAC46F74FA56FF3E1AE952"));

在JavaScript(btoa)中:

const hex2bin = s => s.match(/../g).map(c => String.fromCharCode(parseInt(c, 16))).join``;

console.log(btoa(hex2bin("440EF96DB9A2225C32E031659DF2608B49932F0D8AFAC46F74FA56FF3E1AE952")));

两个输出:

  

RA75bbmiIlwy4DFlnfJgi0mTLw2K + sRvdPpW / z4a6VI =