Байты к двоичному файлу в C

Прогресс, Сообщая для длительных запросов LINQ. В сообщении в блоге можно найти дополнительный метод WithProgressReporting (), который позволяет Вам обнаружить и сообщить о прогрессе запроса linq, как это выполняется.

9
задан BSchlinker 5 November 2009 в 19:36
поделиться

4 ответа

The problem you're having is that your assignment isn't resulting in a true or false value.

bits[i] = byte & (mask << i);

This gets the value of the bit. You need to see if the bit is on or off, like this:

bits[i] = (byte & (mask << i)) != 0;
16
ответ дан 4 December 2019 в 08:01
поделиться

Change

bits[i] = byte & (mask << i);

to

bits[i] = (byte >> i) & mask;

or

bits[i] = (byte >> i) & 1;

or

bits[i] = byte & 1;
byte >>= 1;
7
ответ дан 4 December 2019 в 08:01
поделиться

В одну сторону, среди многих:

#include <stdio.h>
#include <limits.h>

int main(void) {
    int i;
    char bits[CHAR_BIT + 1];
    unsigned char value = 47;

    for (i = CHAR_BIT - 1; i >= 0; i -= 1) {
        bits[i] = '0' + (value & 0x01);
        value >>= 1;
    }

    bits[CHAR_BIT] = 0;

    puts(bits);

    return 0;
}
4
ответ дан 4 December 2019 в 08:01
поделиться

Вы можете заметить, что на вашем выходе есть пара единиц и нулей, а также степени двойки, например 32. Это потому, что после того, как вы изолировали бит, который вы хотите использовать маску, у вас все еще есть чтобы сдвинуть его на наименее значащую цифру, чтобы он отображался как 1. Или вы можете использовать то, что предлагали другие сообщения, и вместо битового сдвига результата (например, что-то вроде 00001000) вы можете просто использовать ( result! = 0), чтобы получить либо 1, либо 0, поскольку в C false равно 0, а сравнения, такие как! =, вернут 1 как true (я думаю).

1
ответ дан 4 December 2019 в 08:01
поделиться
Другие вопросы по тегам:

Похожие вопросы: