簡體   English   中英

將C#轉換為NodeJS

[英]Convert C# To NodeJS

嗨,我正在嘗試將此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]]]).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] bArray [3, 3, 0, 0, 0]message ,並實際上覆蓋您的消息。

然后,輸出此bArray ,結果是AwMAAAA= ,它是[3, 3, 0, 0, 0] AwMAAAA= 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;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM