Bezdepbonusu7Программирование: статьи и ответы

Вопрос

Как преобразовать char в двоичный файл?

Автор вопроса: BlackbinaryОтветов: 2

есть ли простой способ преобразовать символ в его двоичное представление?

Я пытаюсь отправить сообщение другому процессу, по одному биту за раз. Итак, если сообщение "Привет", мне нужно сначала преобразовать "H" в двоичный файл, а затем отправить биты по порядку.

Хранение в массиве было бы предпочтительнее.

Спасибо за любой отзыв, псевдокод или фактический код будут наиболее полезными.

Я думаю, я должен упомянуть, что это школьное задание, чтобы узнать о сигналах... это просто интересный способ узнать о них. SIGUSR1 используется как 0, SIGUSR2 используется как 1, и цель состоит в том, чтобы отправить сообщение от одного процесса к другому, делая вид, что среда блокирует другие методы связи.

  • Не могли бы вы привести пример того, что вы ожидаете на самом деле отправить? Anon. 04.02.2011
  • Итак, вы хотите отправлять только одну двоичную цифру за раз? Почему? Ed S. 04.02.2011
  • ну, на самом деле, с сигналами... все, что мне нужно, это двоичное представление символа. поэтому, возможно, я предоставляю массив int, и через какую-то функцию он становится двоичным. затем я могу перебирать массив и отправлять каждый бит. Это своего рода упражнение в нестандартном мышлении. Blackbinary 04.02.2011
  • Будет ли эта коробка помечена как здравомыслие? ж/к, ж/к :) Ed S. 04.02.2011
  • @ Дэвид Хеффернан, я думаю, что это подлый комментарий. Я понимаю, что это определенно не обычный способ делать что-то, но я думаю, вы могли бы просто сказать, что есть гораздо более простой способ делать что-то, или спросить "почему", как это сделал Эд С. Blackbinary 04.02.2011
  • @Blackbinary Возможно, так. Но вам действительно нужно освоить основы. У вас есть учебники? Там вы научитесь быстрее, чем задавать вопросы на SO. David Heffernan 04.02.2011

cbinarychar

Ответы

Ответ 1 · рейтинг 13 · Murilo Vasconcelos

Вам нужно только зациклить каждый бит, сделать сдвиг и выполнить логику AND, чтобы получить бит.

for (int i = 0; i < 8; ++i) {
    send((mychar >> i) & 1);
}

Например:

unsigned char mychar = 0xA5; // 10100101

(mychar >> 0)    10100101
& 1            & 00000001
=============    00000001 (bit 1)

(mychar >> 1)    01010010
& 1            & 00000001
=============    00000000 (bit 0)

и так далее...

Ответ 2 · рейтинг 3 · Jeremiah Willcock

Что о:

int output[CHAR_BIT];
char c;
int i;
for (i = 0; i < CHAR_BIT; ++i) {
  output[i] = (c >> i) & 1;
}

Это записывает биты из c в output, начиная с младшего значащего бита.

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы