GCC дает ошибку при компиляции кода ниже. Прокомментированные две строки вместо других или и сдвиг линии работают, но я не уверен, что отливки необходимы и верны.Побитовые операции по char *
Ошибка: недействительные операнды в бинарные | (имеют «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);
}
Edit: Я понимаю, что это проблема передачи по ссылке. Я пытаюсь изменить байт. Я хочу, чтобы функция конвертировала биты в байты. На самом деле я сначала написал это так, как предлагают все комментаторы/комментаторы, но пропуск по ссылочному примеру в http://publib.boulder.ibm.com/infocenter/lnxpcomp/v8v101/index.jsp?topic=%2Fcom.ibm.xlcpp8l.doc%2Flanguage%2Fref%2Fcplr233.htm смутил мой разум.
Ваша цель, чтобы изменить байт или адрес байта? В настоящее время вы делаете последнее (в том числе, в пронумерованных строках, прыгаете через обручи, чтобы заставить компилятор разрешить вам это делать), и я подозреваю, что вы хотите сделать первый ... – jimwise
вы знаете, что делаете всю работу по адресу байта не сам байт? –