以下のコードをコンパイルすると、GCCでエラーが発生します。他のまたはシフトラインの代わりにコメントされた2つのラインは機能しますが、キャストが必要であり、真実であるかどうかはわかりません。
エラーは次のとおりです。バイナリへの無効なオペランド| ('char*'と'int'があります)
ありがとう。
void bits2byte(int *bits, char *byte) {
byte = 0;
int i;
for (i = 0; i<8; i++) {
if (bits[i] == 1) {
byte = byte | 0x01;
// byte = (char*)((int)byte | 0x01);
}
if (i<7) {
byte = byte << 0x01;
// byte = (char*)((int)byte << 0x01);
}
}
}
int main() {
int input_bits[] = {1, 1, 0, 1, 0, 0, 1, 1};
char output_byte;
bits2byte(input_bits, &output_byte);
}
編集:これは参照渡しの問題であることを理解しています。バイトを変更しようとしています。この関数でビットをバイトに変換したい。実際、私は最初にすべての回答者/コメント投稿者が提案する方法でそれを書きましたが、 http://publib.boulder.ibm.com/infocenter/lnxpcomp/v8v101/index.jsp? topic =%2Fcomの参照パスの例.ibm.xlcpp8l.doc%2Flanguage%2Fref%2Fcplr233.htmは私の心を混乱させました。