将十进制转换为二进制组合(自定义长度)

时间:2018-09-13 08:25:58

标签: c# bit-manipulation

我需要将几个十进制数字(或字符串或1和0)转换为二进制组合。在.NET中,我看到许多使用Byte的库。字节是对8位的操作。就我而言,我必须使用需要连接在一起的3位集。

例如:

enter image description here

对于过滤器或分区,我有3个位置位。

我应该使用什么来帮助我进行这种转换?目前,我尝试了解BitArray,但不了解如何创建特定大小的位然后轻松填充它们。

这是我已经做过的事

    BitArray headerBits = new BitArray(new bool[] { false, false, true, true, false, false, false, false }); // 8
    BitArray filterBits = new BitArray(new bool[] { false, true, true });  // 11
    BitArray PartitionBits = new BitArray(new bool[] { true, false, true });  // 14
    BitArray CompanyPrefixBits = new BitArray(new bool[] { false, false }); // 16

让我们尝试使用这16个第一位。我想要的结果是

enter image description here

 3074

编辑------

BitArray headerBits = new BitArray(new bool[] { false, false, true, true, false, false, false, false }); // 8
BitArray filterBits = new BitArray(new bool[] { false, true, true });  // 11
BitArray PartitionBits = new BitArray(new bool[] { true, false, true });  // 14
BitArray CompanyPrefixBits = new BitArray(new bool[] { false, false }); // 16

BitArray newBitArray = new BitArray(headerBits.Cast<bool>()
.Concat(filterBits.Cast<bool>())
.Concat(PartitionBits.Cast<bool>())
.Concat(CompanyPrefixBits.Cast<bool>())
.ToArray());

var byteArray = newBitArray.ToByteArray();
Console.WriteLine($"{BitConverter.ToString(byteArray, 0)}");
// Result is 0C-2E
// I expect 30-74

这怎么可能?

2 个答案:

答案 0 :(得分:1)

  

我尝试了解BitArray,但不了解如何创建特定大小的位然后轻松填充它们。

$(".product").on("click",function(){ var title=$(this).data("title"); }); 有几个构造函数。最明显的是从BitArray数组创建BitArray

bool

另一种方法是仅通过大小构造函数创建未初始化的var bits = new BitArray(new[] { true, false, true, true }); ,然后逐个设置位:

BitArray

更新

如果主要问题是将连接的位转换为字节,则最好对所有字段使用一个大的var bits = new BitArray(4); // 4 bits, all false for now for (int i = 0; i < bits.Length; i++) bits[i] = GetMyNextBit();

设置所有位后,可以使用此扩展方法:

BitArray
  

我只对十六进制感兴趣

您可以轻松地将字节转换为十六进制字符串:

public static byte[] ToByteArray(this BitArray bits)
{
    byte[] result = new byte[(bits.Length - 1) / 8 + 1];
    bits.CopyTo(result, 0);
    return result;
}

答案 1 :(得分:0)

我看到您正在从RFID标签读取数据。 所有数据都可以视为一系列字节,因此示例使用字节。

如果数据要以十六进制格式显示为字符串,那么我建议您将数据读入数组,然后使用

System.Convert.ToString(data, base);

其中数据是您的16位值,二进制,八进制,十进制或十六进制的基数可以是2,8、10、16。