十六进制字符串输出在浏览器和服务器javascript中不同

时间:2014-04-20 07:16:51

标签: javascript node.js

我想用十六进制字符串包装一系列字符,这个小脚本:

var resultBuffer = [];
var sourceBuffer = "004CS01".split('');

resultBuffer.push("\\x" + "02");

for (var i = 0; i < sourceBuffer.length; i++) {
    resultBuffer.push(sourceBuffer[i]);
}

resultBuffer.push("\\x" + "03");
resultBuffer.push("\\x" + "62");
console.log(resultBuffer);   

我遇到一个问题,即同一个脚本创建不同的输出。这是来自浏览器:小提琴http://jsfiddle.net/m5sUD/

["\x02", "0", "0", "4", "C", "S", "0", "1", "\x03", "\x62"] 

这来自nodejs服务器(参见http://runnable.com/me/U1NzLLgIj8pXRQq4):

[ '\\x02', '0', '0', '4', 'C', 'S', '0', '1', '\\x03', '\\x62' ]

为什么会有所不同?我需要服务器上的输出就像在浏览器中一样。

2 个答案:

答案 0 :(得分:2)

browser和node.js的resultBuffer值相同。如果在resultBuffer中打印每个值,则node.js和browser将打印相同的值。

尝试以下代码

for (idx in resultBuffer) console.log(resultBuffer[idx]);

在我的电脑中,node.js和浏览器打印相同的值。

\x02
0
0
4
C
S
0
1
\x03
\x62

这只是node.js和browser中数组值表示方法的问题。价值相同。

答案 1 :(得分:1)

我认为这是因为\不是浏览器javascript中的特殊字符,而是node.js中的特殊字符,因此它被另一个反斜杠\转义