首页 > 解决方案 > C# 写入 8 位数据包,分成 3 个整数

问题描述

我需要在这个分区中编写一个 8 位数据包,其中包括 3 个整数:

int1 = 1 bit
int2 = 1 bit
int3 = 6 bit

我不知道该怎么做。我可以写一些 4 字节的数据包,使用这个对我们有用的函数:

buffer.AddRange(BitConverter.GetBytes(_value));

但是我需要帮助来编写一个 8 位数据包,该数据包分为许多整数(或位元素)。我已经阅读过有关 BitArray 的信息,但我真的不知道如何使用它。我已经写了一些代码,但不知道它是否真的可以工作:

bool playback = false;
bool extExerciseNum = false;
BitArray byte4 = new BitArray(2);
byte4.Set(0, playback);
byte4.Set(1, extExerciseNum);

在这里,我假装使用前 2 个单独的整数创建一个 BitArray。

int exerciseNumber = 23;
BitArray b = new BitArray(new int[] { exerciseNumber });
int[] bits = b.Cast<bool>().Select(bit => bit ? 1 : 0).ToArray();

在这里,我假装写了一个 6 位长度的 BitArray(顺便说一下,我没有正确理解它)。

任何人都可以帮助我如何正确编写这个包?太感谢了!!

标签: c#integerbitpacketbitarray

解决方案


假设int1应该占据最高有效位 (MSB),使用位移和或来产生 8 位值:

byte result = (byte)((int1 << 7) | (int2 << 6) | int3);

(不包括范围检查)。对于其他位顺序(int1应占用最低有效位):

byte result = (byte)(int1 | (int2 << 1) | (int3 << 2));

推荐阅读