【发布时间】:2014-01-05 10:45:54
【问题描述】:
BitArray bits=new BitArray(16); // size 16-bit
有 bitArray,我想在 c# 中将此数组的 16 位转换为无符号整数,
我不能使用copyto进行转换,还有其他方法可以将16-bit转换为UInt16吗?
【问题讨论】:
标签: c# asp.net int bit bitarray
BitArray bits=new BitArray(16); // size 16-bit
有 bitArray,我想在 c# 中将此数组的 16 位转换为无符号整数,
我不能使用copyto进行转换,还有其他方法可以将16-bit转换为UInt16吗?
【问题讨论】:
标签: c# asp.net int bit bitarray
你可以这样做:
UInt16 res = 0;
for (int i = 0 ; i < 16 ; i++) {
if (bits[i]) {
res |= (UInt16)(1 << i);
}
}
该算法将16个最低有效位一一检查,并使用按位或运算来设置结果的对应位。
【讨论】:
(1 << i) 前面添加了(uint16),以告诉C# 表达式需要先转换为uint16,然后才能在OR 中使用。
您可以遍历它并自己组合值。
var bits = new BitArray(16);
bits[1] = true;
var value = 0;
for (int i = 0; i < bits.Length; i++)
{
if (lBits[i])
{
value |= (1 << i);
}
}
【讨论】:
这应该做的工作
private uint BitArrayToUnSignedInt(BitArray bitArray)
{
ushort res = 0;
for(int i= bitArray.Length-1; i != 0;i--)
{
if (bitArray[i])
{
res = (ushort)(res + (ushort) Math.Pow(2, bitArray.Length- i -1));
}
}
return res;
}
【讨论】:
您可以在该问题的 stackoverflow 中查看另一个答案:
【讨论】: