2013-08-20 3 views
7

Я хочу действительно основной способ распечатать двоичное представление символа. Кажется, я не могу найти какой-либо пример кода.Печать двоичного представления символа в C

Я предположил, что вы можете сделать это несколькими строками, но все, что я нахожу, слишком длинное и сложное, используя множество функций, которые я раньше не использовал. atoi подходит много, но это не стандарт.

Есть ли простая функция или простой способ записи функции для принятия переменной char, а затем распечатать двоичное представление?

Например: char 'x' - это аргумент, принятый функцией, и «x is 0111 1000» распечатывается.

Это для школьного задания, где я должен взять пользовательский ввод строки и распечатать строку в двоичном формате. Мне просто нужно получить основы преобразования char в двоичный файл, но я сейчас борюсь.

+1

Вы должны написать свою попытку ... –

+0

http://stackoverflow.com/questions/7863499/conversion-of-char-to-binary-in-c – rags

+0

http://stackoverflow.com/questions/4892579/how -to-convert-a-char-to-binary – rags

ответ

13

Что нужно сделать, так это использовать побитовые операторы для маскировки бит по одному и распечатать их до стандартного вывода.

  1. char в С гарантированно будет 1 байт, таким образом, чтобы петли 8.
  2. В течение каждой итерации маскируйте бит наивысшего порядка.
  3. Как только у вас есть это, просто распечатайте его до стандартного вывода.

Вот быстрый удар, который, мы надеемся, имеет смысл ...

main() { 
    char a = 10; 
    int i; 
    for (i = 0; i < 8; i++) { 
     printf("%d", !!((a << i) & 0x80)); 
    } 
    printf("\n"); 

    return 0; 
} 

CodePad.

Для того, чтобы получить бит, я перемещаюсь влево, чтобы получить нумерованный бит (от самого высокого до самого низкого, так что его легко распечатать), а затем замаскировать его. Затем переведите его на 0 или 1 с !!.

+0

Это прекрасно, именно то, что я искал! Я буду читать маскировку операторов сдвига, чтобы я мог полностью понять это. Если у вас есть время, хотя вы могли бы объяснить, что означает «маска наивысшего бита». С моими знаниями в настоящее время я не уверен на 100%, что происходит на главной линии внутри цикла for. Спасибо! – user1783150

+0

@ user1783150 бит высокого порядка - это 7-й бит, например. '1' в' 1000000' (также номер '0x80' или' 128'). – alex

+0

Мне все еще немного любопытно, как «!!» работает оператор? Преобразует ли оно любое положительное число в «1» и сохраняет 0 как «0»? google of '"!!" оператор C 'не дает никаких результатов, чтобы быть честным. Разве это не стандартный оператор? – user1783150

2

вы можете использовать этот метод

const char *byte_to_binary(int x) 
{ 
    static char b[9]; 
    b[0] = '\0'; 

    int z; 
    for (z = 128; z > 0; z >>= 1) 
    { 
     strcat(b, ((x & z) == z) ? "1" : "0"); 
    } 

    return b; 
} 

, чтобы получить двоичное представление и печать с его

, например

printf("%s\n", byte_to_binary(15)); 
1
void printBits(size_t const size, void const * const ptr) 
{ 
    unsigned char *b = (unsigned char*) ptr; 
    unsigned char byte; 
    int i, j; 

    for (i=size-1;i>=0;i--) 
    { 
     for (j=7;j>=0;j--) 
     { 
      byte = b[i] & (1<<j); 
      byte >>= j; 
      printf("%u", byte); 
     } 
    } 
    puts(""); 
} 

int main(int argv, char* argc[]) 
{ 
     int i = 23; 
     uint ui = UINT_MAX; 
     float f = 23.45f; 
     printBits(sizeof(i), &i); 
     printBits(sizeof(ui), &ui); 
     printBits(sizeof(f), &f); 
     return 0; 
} 
0

Попробуйте это: -

#include <limits.h> 
char *chartobin (unsigned char c) 
{ 
    static char bin[CHAR_BIT + 1] = {0}; 
    int i; 
    for(i = CHAR_BIT - 1; i >= 0; i--) 
    { 
     bin[i] = (c % 2) + '0'; 
     c /= 2; 
    } 
    return bin; 
} 
Смежные вопросы