c# - 使用 C# 设置字节数组中的位

标签 c# arrays

我有一个 32 字节的字节数组,其中每个字节的前 4 位(0 到 3)表示 1 到 128 之间的数字的设置或未设置状态。例如,如果给我数字 3,我需要在数组的第一个字节中设置位 2。如果我得到数字 9,我需要设置数组中第三个字节的位 0。我遇到的问题是找到一种在 C# 中执行此操作的明智方法。我确信一定有一种简单的方法可以在数学上做到这一点,但到目前为止还没有找到一种方法。当我在这个问题上摸不着头脑时,我想我会看看是否有人可以提供一些建议。

------------更新--------------------

根据给出的答案,我生成了以下函数。这正是我需要的。我可能没有在我的问题中明确说明我需要什么,但是我得到了足够的建议来找到正确的代码。

// outputNumber = number passed into this function

byte[] bytes = new byte[32];

int bit = (outputNumber - 1) % 4;

byte byteSetting = (byte)(1 << bit);

bytes[(outputNumber - 1) / 4] |= byteSetting;

最佳答案

int byt = bitNumber / 4; // You could do byt = bitNumber >> 2
int bit = bitNumber % 4; // You could do bit = bitNumber & 3

bytes[byt] |= (byte)(1 << bit);

bytes 是您的字节数组。

重置它:

bytes[byt] &= (byte)(byte.MaxValue ^ (1 << bit));

读取一个字节的值:

var res = bytes[byt] & (byte)(1 << bit)

(如果你有兴趣,^就是异或运算符)

关于c# - 使用 C# 设置字节数组中的位,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7417167/

相关文章:

c# - 如何在解决方案中的项目之间共享单个配置?

c# - 如何从 Entity Framework 中的存储过程中获取数据作为数据集

c# - 如何在 .NET Core 中测试 Controller

php - 减少PHP中多维数组的下层

JavaScript - 基于数组计算值

c# - Func 不返回任何东西?

c# - WPF 数据绑定(bind) : database or objects?

python - 从生成器创建两个串联数组

Java:如何根据对象的类型动态创建指定类型的数组?

c - 应用 XOR 交换算法时的指针问题