我有这个功能是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;
}
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;
}
但我不确定。 我的主要困境是“BigInteger”类型(但不仅如此)。 任何帮助都会得到适当的帮助。
最佳答案
UInt8
是“无符号 8 位整数”。在 C# 中,它是 byte
,因为 uint
是“无符号 32 位整数”。所以 UInt8Array
是 byte[]
。
Javascript BigInteger
对应C#BigInteger
(来自System.Numerics
dll或nuget包),不是long
。在某些情况下,long
可能就足够了。例如,如果使用 javascript 算法中的 BigInteger
只是因为在 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;
}
关于c# - Node.js 到 C# 转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49573215/