我需要将几个十进制数(或字符串或1和0)转换为二进制组合。在.NET中,我看到许多库使用Byte。字节是8位的操作。在我的情况下,我必须使用一组3位,我需要连接在一起。
例如:
对于过滤器或分区我有一个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个第一位。我想要的结果是
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
这怎么可能?
我尝试理解BitArray,但我不明白如何创建特定大小的位,然后轻松填充它们。
BitArray
有几个建设者。最明显的是从BitArray
数组创建bool
:
var bits = new BitArray(new[] { true, false, true, true });
另一种方法是仅通过size构造函数创建一个未初始化的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;
}
我只对十六进制感兴趣
您可以轻松地将字节转换为十六进制字符串:
var result = new StringBuilder(bytes.Length * 2);
for (int i = 0; i < bytes.Length; i++)
result.Append(bytes[i].ToString("X2"));
我看到你正在从RFID标签上读取数据。所有数据都可以视为一系列字节,因此示例使用字节。
如果数据要以十六进制格式显示为字符串,那么我建议您将数据读入数组然后使用
System.Convert.ToString(data, base);
数据是16位值,二进制,八进制,十进制或十六进制的基数可以是2,8,10,16。