我有一个字节数组myByteArray[82]

我想将这个数组中的37位准确地更改为补码值。即。如果bit0具有“ 1”,我想将其更改为“ 0”。我需要先更改37个此类位,以在此字节数组中引入错误。

请建议如何做

最佳答案

尚不清楚您要做什么。我最好的理解是,您有一个82个字节的数组,并且想要反转数组的最低37位。由于一个字节是8位,因此您可以执行以下操作:

byte[] myByteArray = new byte[82];
// invert lowest 32 bits, 8 at a time
for (int i = 0; i < 4; ++i) {
    myByteArray[i] = (byte)(~myByteArray[i]);
}
// invert next five bits
myByteArray[4] = (byte) (
    (myByteArray[4] & 0xE0) // top 3 bits unchanged
    |
    ((~myByteArray[4)) & 0x1F) // bottom 5 bits inverted
    );

10-05 17:52