将c#转换为NodeJS
本文关键字:NodeJS 转换 | 更新日期: 2023-09-27 18:15:30
嗨,所以我试图将这个c#函数转换为NodeJS,但它不工作,我真的不知道是什么错了,让我显示一些代码和输出
c#:private static byte[] ConvertMsg(byte[] message, byte type = 255, byte cmd = 255)
{
int msgLength = message.Length;
byte[] bArray = new byte[msgLength + 3];
bArray[0] = type;
bArray[1] = cmd;
Buffer.BlockCopy(message, 0, bArray, 2, msgLength);
bArray[msgLength + 2] = 0;
return bArray;
}
static void Main()
{
byte[] encrypted = ConvertMsg(Encoding.Default.GetBytes("hi"),3,3);
Console.WriteLine($"Encrypted: {Convert.ToBase64String(encrypted)}");
Console.ReadKey();
}
输出:AwNoaQA=
NodeJS:
function ConvertMsg(message, type=255, cmd=255){
let length = message.length;
let bArray = Buffer.alloc(length+3);
bArray[0] = type;
bArray[1] = cmd;
bArray.copy(message,0,length);
bArray[length + 2] = 0;
return bArray;
}
let encrypted = ConvertMsg(Buffer.from("hi"),3,3);
console.log(encrypted.toString("base64"));
输出:AwMAAAA=
正如你所看到的输出是不一样的,非常感谢任何帮助,请解释当你回答我想了解更多,谢谢。
根据Buffer
文档,.copy(target[, targetStart[, sourceStart[, sourceEnd]]])
这里将数据从buf的一个区域复制到目标的一个区域,即使目标内存区域与buf重叠。
// means copy 'bArray' starting from length to 'message' starting from 0
bArray.copy(message, 0, length);
不复制message
的内容到bArray
。你做相反的事情——你复制bArray
的内容,现在是[3, 3, 0, 0, 0]
到message
,实际上覆盖你的消息。
然后,输出这个bArray
,结果是AwMAAAA=
,它是[3, 3, 0, 0, 0]
的Base64表示。
你可以这样修改你的函数:
function ConvertMsg(message, type=255, cmd=255){
let length = message.length;
let bArray = Buffer.alloc(length + 3);
bArray[0] = type;
bArray[1] = cmd;
// means copy 'message' starting from 0 to 'bArray' starting from 2
message.copy(bArray, 2);
bArray[length + 2] = 0;
return bArray;
}