c# - Node.js 到 C# 转换

标签 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 = 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 位整数”。所以 UInt8Arraybyte[]

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/

相关文章:

c# - 使用 savefileDialog 选择文件夹路径

javascript - 使用 node.js 编写用于图像上传的过滤器列表的设计模式

javascript - 如何在 Node JS 中验证电子邮件 ID 的唯一性

javascript - 通过套接字传输时数组数据被复制(Socket.io)

node.js - 应如何在backbone.js 中初始化页面,以最大限度地减少 HTTP 请求和延迟

c# - 如果文本包含以下字符

javascript - Google map js api 在纯 html 页面中工作正常,但在 asp.net mvc 页面中不起作用

c# - DEVCON.EXE(驱动工具)和OpenVPN

c# - 任务与线程池

node.js - Nodejs - 合并 2 个或更多模块