Предполагается, что char
равно 8 битам, а порядковый номер имеет младший порядковый номер:
char *str = ...;
str[15] ^= 0x80;
Это перевернет 127-й бит.bit-endian - это big-endian, затем используйте 0x01
.
Ответ также зависит от того, как пронумерованы биты.Если мы начнем нумерацию с 0, используйте 0x80
.Если мы индексируем от 1, то мы используем 0x40
.(0x01
и 0x02
для big-endian)
EDIT 2: Вот общий случай: (с теми же предположениями)
char *str = ...;
int bit = 127;
int index = bit / 8; // Get the index
int chbit = bit % 8; // Get which bit in the char
int mask = 1 << chbit; // Build the mask
str[index] ^= mask; // XOR to flip the bit.