将C#转换为NodeJS

时间:2016-10-28 04:50:29

标签: c# node.js

您好我正在尝试将此C#功能转换为NodeJS但它不起作用我真的不知道出了什么问题lemme显示了一些代码和输出

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=

正如您所看到的输出不一样,我们非常感谢任何帮助,请在回答时解释我想了解更多,谢谢。

1 个答案:

答案 0 :(得分:4)

根据Buffer documentation.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;
}