如何通过函数longArrayToString在php和nodejs之间获得相同的字符串
我使用xxtea算法在php和nodejs之间通信,但是当将长数组传输到字符串时,无法得到相同的结果 我曾尝试在nodejs和php中打印结果字符串的长度,两者都是4,但当我读取nodejs编写的文件时,它的长度变为6。我曾经在十六进制模式下打开过两个文件,php文件显示了正确的十六进制字符串“6C11 F0 B8”,但在nodejs中是“6C11 C3 B0 C2 B8”。这似乎是由于ascii和unicode之间的差异造成的 因此我想知道如何通过修改nodejs中的longaraytostring函数来获得相同的结果如何通过函数longArrayToString在php和nodejs之间获得相同的字符串,php,node.js,unicode,hex,ascii,Php,Node.js,Unicode,Hex,Ascii,我使用xxtea算法在php和nodejs之间通信,但是当将长数组传输到字符串时,无法得到相同的结果 我曾尝试在nodejs和php中打印结果字符串的长度,两者都是4,但当我读取nodejs编写的文件时,它的长度变为6。我曾经在十六进制模式下打开过两个文件,php文件显示了正确的十六进制字符串“6C11 F0 B8”,但在nodejs中是“6C11 C3 B0 C2 B8”。这似乎是由于ascii和unicode之间的差异造成的 因此我想知道如何通过修改nodejs中的longaraytostr
下面的
技术给出了带有字节(十六进制)的.txt
文件:6c11 F0 B8
.toString(16)
部分将int值转换为十六进制字符串(例如:int108==hex 6C
)。
因此,只需使用+=
将每个十六进制文本附加到最终/输出字符串
1) 创建一个临时变量,用于保存最终十六进制字符串。例如:var num_as_HexStr=“”代码>
2) 第二个For循环是附加的:num_as_HexStr+=(data[i][j].charCodeAt()).toString(16)代码>
3) 现在您可以将num\u作为\u hextr
(而不是将b
写入文件)。预期的十六进制将是正确的
const fs = require('fs');
var num_as_HexStr = "";
a = [-1192226452];
b = longArrayToString(a);
console.log("var b is: " + b);
console.log("var num_as_HexStr is: " + num_as_HexStr);
fs.writeFile('./b.txt', num_as_HexStr, function(error){});
function longArrayToString(data) {
let length = data.length, n = (length - 1) << 2;
console.log("string check 1");
for (let i = 0; i < length; ++i) {
console.log(data[i]);
data[i] = String.fromCharCode(
data[i] & 0xff,
data[i] >>> 8 & 0xff,
data[i] >>> 16 & 0xff,
data[i] >>> 24 & 0xff
);
console.log("string check 2");
for(j = 0; j < data[i].length; j ++)
{
console.log(data[i][j].charCodeAt());
num_as_HexStr += (data[i][j].charCodeAt()).toString(16);
//console.log("hex string: " + num_as_HexStr);
}
}
return data.join("");
}
const fs=require('fs');
var num_as_hextr=“”;
a=[-1192226452];
b=长串(a);
log(“变量b是:”+b);
log(“var num_as_hextstr是:“+num_as_hextstr”);
writeFile('./b.txt',num_as_hextstr,函数(错误){});
函数longArrayToString(数据){
设length=data.length,n=(length-1)>>8&0xff,
数据[i]>>>16和0xff,
数据[i]>>>24&0xff
);
日志(“字符串检查2”);
对于(j=0;j下面的技术给出了带有字节(十六进制)的.txt
文件:6c11 F0 B8
.toString(16)
部分将int值转换为十六进制字符串(例如:int108==hex 6C
)。
因此,只需使用+=
将每个十六进制文本附加到最终/输出字符串
1) 创建一个临时变量,用于保存最终十六进制字符串。例如:var num_as_HexStr=“”代码>
2) 第二个For循环是附加的:num_as_HexStr+=(data[i][j].charCodeAt()).toString(16)代码>
3) 现在您可以将num\u作为\u hextr
(而不是将b
写入文件)。预期的十六进制将是正确的
const fs = require('fs');
var num_as_HexStr = "";
a = [-1192226452];
b = longArrayToString(a);
console.log("var b is: " + b);
console.log("var num_as_HexStr is: " + num_as_HexStr);
fs.writeFile('./b.txt', num_as_HexStr, function(error){});
function longArrayToString(data) {
let length = data.length, n = (length - 1) << 2;
console.log("string check 1");
for (let i = 0; i < length; ++i) {
console.log(data[i]);
data[i] = String.fromCharCode(
data[i] & 0xff,
data[i] >>> 8 & 0xff,
data[i] >>> 16 & 0xff,
data[i] >>> 24 & 0xff
);
console.log("string check 2");
for(j = 0; j < data[i].length; j ++)
{
console.log(data[i][j].charCodeAt());
num_as_HexStr += (data[i][j].charCodeAt()).toString(16);
//console.log("hex string: " + num_as_HexStr);
}
}
return data.join("");
}
const fs=require('fs');
var num_as_hextr=“”;
a=[-1192226452];
b=长串(a);
log(“变量b是:”+b);
log(“var num_as_hextstr是:“+num_as_hextstr”);
writeFile('./b.txt',num_as_hextstr,函数(错误){});
函数longArrayToString(数据){
设length=data.length,n=(length-1)>>8&0xff,
数据[i]>>>16和0xff,
数据[i]>>>24&0xff
);
日志(“字符串检查2”);
对于(j=0;j