C#Enumerable是否等效于NodeJ中将字符串转换为字节数组的功能?

时间:2019-01-16 12:51:25

标签: javascript c# node.js

我正在将十六进制字符串发送到一个函数,并使用c#将其作为字节数组返回,但是现在的要求是在NodeJs中执行此操作。

我对此进行了过多搜索,但非解决方案给了我相同的结果

这是我的带有十六进制字符串的c#代码

    `8001000501335688003300020002000200`

    public static byte[] StringToByteArray(string hex)
    {
        var byteArray = Enumerable.Range(0, hex.Length)
                         .Where(x => x % 2 == 0)
                         .Select(x =>Convert.ToByte(hex.Substring(x,2),16))
                         .ToArray();
        return byteArray;
    }

我在NodeJs中尝试了此代码,但没有得到相同的结果

    function StringToByteArray(hex) {
        var rangebytes = range(0, hex.length).filter(x => x % 2 == 0)
        var filteredHex = rangebytes.match(x => 
            Buffer.from(hex.substring(x, 2), "utf8"));

        return filteredHex;
     }

    function range(start, count) {
        return Array.apply(0, Array(count))
        .map(function (element, index) {
                        return index + start;
                });
      }  

这是C#代码的结果  http://prntscr.com/m7xnzg

2 个答案:

答案 0 :(得分:2)

此函数会将十六进制字符串转换为Node.js中的字节数组:

function hexStringToByteArray(hexStr) {
    let a = [];
    for(let c = 0; c < hexStr.length; c += 2) {
        a.push(parseInt(hexStr.substr(c, 2), 16));
    }
    return a;
}

console.log("Result: ", hexStringToByteArray("8001000501335688003300020002000200"));

答案 1 :(得分:1)

为此最好使用Buffer API:

Buffer.from('8001000501335688003300020002000200', 'hex')

// <Buffer 80 01 00 05 01 33 56 88 00 33 00 02 00 02 00 02 00>