Node.js到c#转换

Node.js到c#转换,c#,node.js,C#,Node.js,我有这个函数是Node.js // @param {BigInteger} checksum // @returns {Uint8Array} function checksumToUintArray(checksum) { var result = new Uint8Array(8); for (var i = 0; i < 8; ++i) { result[7 - i] = checksum.and(31).toJSNumber(); checksum = c

我有这个函数是Node.js

// @param {BigInteger} checksum
// @returns {Uint8Array}

function checksumToUintArray(checksum) {
  var result = new Uint8Array(8);
  for (var i = 0; i < 8; ++i) {
    result[7 - i] = checksum.and(31).toJSNumber();
    checksum = checksum.shiftRight(5);
  }
  return result;
}    
/@param{BigInteger}校验和
//@returns{Uint8Array}
函数checksumToUintArray(校验和){
var结果=新的Uint8Array(8);
对于(变量i=0;i<8;++i){
结果[7-i]=校验和(31).toJSNumber();
校验和=校验和。移位触发器(5);
}
返回结果;
}    
c#中的等价物是什么

我在想:

    public static uint[] ChecksumToUintArray(long checksum)
    {
        var result = new uint[8];
        for (var i = 0; i < 8; ++i)
        {
            result[7 - i] = (uint)(checksum & 31);
            checksum = checksum >> 5;         
        }
        return result;
    }
public static uint[]校验和数组(长校验和)
{
var结果=新uint[8];
对于(变量i=0;i<8;++i)
{
结果[7-i]=(uint)(校验和&31);
校验和=校验和>>5;
}
返回结果;
}
但我不确定。 我的主要困境是“BigInteger”类型(但不仅如此)。 任何帮助都将被占用。

UInt8
是“无符号8位整数”。在C#中,这是
byte
,因为
uint
是“无符号32位整数”。所以
UInt8Array
byte[]

Javascript
BigInteger
对应于C#
BigInteger
(来自
System.Numerics
dll或nuget包),而不是
long
。在某些情况下,
long
可能就足够了。例如,如果在javascript算法中使用
biginger
,只是因为javascript中没有64位整数,那么在C#中可以用
long
替换它。但一般来说,在没有任何关于预期范围的附加信息的情况下,javascript
BigInteger
的范围比C
long
的范围大得多

知道了这一点,您的方法将变成:

public static byte[] ChecksumToUintArray(BigInteger checksum) {
    var result = new byte[8];
    for (var i = 0; i < 8; ++i) {
        result[7 - i] = (byte) (checksum & 31);
        checksum = checksum >> 5;
    }
    return result;
}
public static byte[]checksumtointerray(biginger校验和){
var结果=新字节[8];
对于(变量i=0;i<8;++i){
结果[7-i]=(字节)(校验和&31);
校验和=校验和>>5;
}
返回结果;
}

您至少应该返回
uint[]
或重命名该方法。@C.Evenhuis,是的,您是对的,我错过了。谢谢。js BigInteger是有符号的吗?在javascript中有几个大整数的实现。我记得Mist popular有一个构造函数参数,您可以用它来控制它是否被签名。