如何通过函数longArrayToString在php和nodejs之间获得相同的字符串

如何通过函数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

我使用xxtea算法在php和nodejs之间通信,但是当将长数组传输到字符串时,无法得到相同的结果

我曾尝试在nodejs和php中打印结果字符串的长度,两者都是4,但当我读取nodejs编写的文件时,它的长度变为6。我曾经在十六进制模式下打开过两个文件,php文件显示了正确的十六进制字符串“6C11 F0 B8”
,但在nodejs中是“6C11 C3 B0 C2 B8”。这似乎是由于asciiunicode之间的差异造成的

因此我想知道如何通过修改nodejs中的longaraytostring函数来获得相同的结果


下面的
技术给出了带有字节(十六进制)的
.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