Node.js到c#转换
我有这个函数是Node.jsNode.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
// @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[]
JavascriptBigInteger
对应于C#BigInteger
(来自System.Numerics
dll或nuget包),而不是long
。在某些情况下,long
可能就足够了。例如,如果在javascript算法中使用biginger
,只是因为javascript中没有64位整数,那么在C#中可以用long
替换它。但一般来说,在没有任何关于预期范围的附加信息的情况下,javascriptBigInteger
的范围比Clong
的范围大得多
知道了这一点,您的方法将变成:
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有一个构造函数参数,您可以用它来控制它是否被签名。