我有一个 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/