いくつかの要件に従って LSB (最下位ビット) を変更して、バッファーの各バイトを編集しようとしています。バイトに unsigned char 型を使用しているので、正しいか間違っているか教えてください。
unsigned char buffer[MAXBUFFER];
次に、私はこの機能を使用しています
char *uchartob(char s[9], unsigned char u)
これは、最初のパラメーターをビットの配列として変更して返します。配列内のビットが 2 番目のパラメーターを表すため、この関数は正常に機能します。
ここから面倒なことが始まります。私がやろうとしていることを段階的に指摘するつもりです。
上記の関数(バッファの各要素に対して呼び出される)の結果を変数に保存しています
char binary_byte[9]; // array of bits
上記のようなフラグと比較するだけでLSBをテストしています。
if (binary_byte[7]==bit_flag) // i go on and modify it like this
binary_byte[7]=0; // or 1, depending on the case
次に、ビットの配列binary_byte (ビットの配列ですね) を byte/unsigned charに変換し、同時にバッファ内のデータを更新しようとしています。私は今、本当に混乱しているので、私は自分自身を十分に明確にしてくれることを願っています.
buffer[position_in_buffer]=binary_byte[0]<<7| // actualize the current BYTE in the buffer
binary_byte[1]<<6|
binary_byte[2]<<5|
binary_byte[3]<<4|
binary_byte[4]<<3|
binary_byte[5]<<2|
binary_byte[6]<<1|
binary_byte[7];
binary_byte[7] の位置のビットが変更される可能性があることに注意してください。これがすべてのポイントです。
ソリューションは本当にエレガントではありませんが、私がやったことは本当に不安ですが、うまくいきます(ビットごとの演算子でやろうとしましたが、成功しませんでした)
奇妙なのは、更新された文字をバッファから出力しようとしているときです。以前のキャラクターとビットは同じですが、まったく別のキャラクターです。
私の最後の質問は次のとおりです。バイトの LSB だけを変更すると、どのような影響がありますか? 私は何を期待すべきですか?. ご覧のとおり、取得してはいけない場合でも「新しい」文字しか取得していません。