【问题标题】:Convert 64 bits array into Int64 or ulong C#将 64 位数组转换为 Int64 或 ulong C#
【发布时间】:2015-06-09 08:27:57
【问题描述】:

我有一个 int 位数组(长度始终为 64),例如:

1110000100000110111001000001110010011000110011111100001011100100

我想把它写在一个Int64(或ulong?)变量中。怎么做?

我试图创建一个BitArray,然后得到int,但它在CopyTo 行上抛出System.ArgumentException

private static Int64 GetIntFromBitArray(BitArray bitArray) {
    var array = new Int64[1];
    bitArray.CopyTo(array, 0);
    return array[0];
}

【问题讨论】:

    标签: c# 64-bit bit-manipulation typeconverter bitarray


    【解决方案1】:

    那是因为正如documentation中提到的,

    指定的数组必须是兼容的类型。仅支持 bool、int 和 byte 类型的数组。

    所以你可以这样做:(未测试)

    private static long GetIntFromBitArray(BitArray bitArray)
    {
        var array = new byte[8];
        bitArray.CopyTo(array, 0);
        return BitConverter.ToInt64(array, 0);
    }
    

    查看BitArray.CopyTo 的实现,将位复制到int[](然后从其两半构建long)会更快,看起来像这样:(也未测试)

    private static long GetIntFromBitArray(BitArray bitArray)
    {
        var array = new int[2];
        bitArray.CopyTo(array, 0);
        return (uint)array[0] + ((long)(uint)array[1] << 32);
    }
    

    转换为uint 是为了防止符号扩展。

    【讨论】:

    • 太棒了!你让我开心!解决了。​​
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-09-29
    • 1970-01-01
    • 1970-01-01
    • 2011-05-02
    • 1970-01-01
    • 2013-11-18
    • 1970-01-01
    相关资源
    最近更新 更多