私は少しのコードを使いこなし、ファイル内のビットを切り替えて元のファイルに戻すことにしました。何とか、それはビットを変更しますが、それらを元に戻すことはありません。ここでビットを切り替えますが、ビットを元に戻しませんか?
は私が持っているものです。
魔法はrByteにファイルや関数freadを開く私がたまたま[0]とrByte [1]。
unsigned char rByte[] = {0, 0};
int isBitSet(unsigned char byte, int bytePosition){
unsigned char mask[] = {128, 64, 32, 16, 8, 4, 2, 1};
return ((byte & mask[bytePosition]) != 0);
}
unsigned char setBit(unsigned char byte, int pos) {
byte |= (0x01 << pos);
return byte;
}
unsigned char clearBit(unsigned char byte, int pos){
byte &= ~(0x01 << pos);
return byte;
}
/* DO NOT TOUCH */
void switchBits (unsigned char byte1, unsigned char byte2, int x, int y) {
int reg1 = 0;
int reg2 = 0;
reg1 = isBitSet(byte1, x);
reg2 = isBitSet(byte2, y);
if ((reg1 == reg2)) {
}
if ((reg1 == 0) && (reg2 != 0)){
rByte[0] = setBit(byte1, x);
rByte[1] = clearBit(byte2, y);
}
if((reg2 == 0) && (reg1 != 0)){
rByte[0] = clearBit(byte1, x);
rByte[1] = setBit(byte2, y);
}
}
は今、私は同じswitchBits()
が適用される場合、私はそれを感じる方法は、プログラムが定期的に戻って行く必要があることを前提としています。私は音楽ファイルを作って変な騒音を作りましたが、正常に戻っていませんでした。
ビットが1より大きい場合、次のように切り替わります。0 1 2 3(original) - > 1 0 3 2(switched)?スイッチビット(rByte [0]、rByte [1]、4,5); –
; thrの2番目のビットと2番目のビットを切り替える必要があります。 – WickSec
多分ifの代わりにelseを使うべきでしょう。変更が加えられた場合、これ以上の変更は必要ありません。 –