我需要将几个十进制数字(或字符串或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
这怎么可能?
答案 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。