我设计了一个自定义文件格式/网络消息以尽可能减小大小,但我不知道如何实现它。任何抬头都会有所帮助。
前2个字节对应2个数字,范围从0到63,所以我使用6位。在剩余的4位中,我存储了另一个数字,从0到15。
例如,如果我的数字 34 , 25 且 15 ,则这些位看起来像:
34---|25----|15-- 10001001 10011111
我查看了 BitArray 和 BitConverter ,但我发现函数适用于8位,16位和32位类型,而不是自定义类型。
当然完整的格式要长得多,但如果我理解了这一点,我想我会继续。
任何人都有一些建议或者可以给我一个提示来开始这个?
谢谢!
答案 0 :(得分:2)
我担心你必须亲自编写你的位操作代码。在您的示例中,代码看起来像这样:
int a = 34;
int b = 25;
int c = 15;
byte[] data = new byte[2];
// Store to byte array
data[0] = (byte)((a << 2) + (b >> 4));
data[1] = (byte)((b << 4) + c);
// Read from byte array
a = data[0] >> 2;
b = ((data[0] & 3) << 4) + (data[1] >> 4);
c = data[1] & 15;
Console.WriteLine("a = " + a); // 34
Console.WriteLine("b = " + b); // 25
Console.WriteLine("c = " + c); // 15
您可以使用位移运算符(<<
和>>
)以及逻辑位运算符(|
和&
)来操作位。
答案 1 :(得分:1)
我查看了BitArray和BitConverter,但我找到了函数 适用于8位,16位和32位类型,而不是自定义类型。
您必须编写自己的功能。我只是建议一个结构。然后,您可以发送X字节,读取并解析这些字节到您的结构中,而不必担心编写自己的方法。
通常这样做。您可以定义结构的确切大小,它的工作方式与您希望的完全相同。