2013-08-20 44 views
7

我想要一個真正基本的方法來打印char的二進制表示形式。我似乎無法在任何地方找到任何示例代碼。在C中打印char的二進制表示形式

我以爲你能做到這一點的幾行,但一切我覺得是過於漫長而複雜的使用許多我以前沒有使用過的功能。 atoi出現了很多,但它不是標準。

有一個簡單的功能或者寫一個函數取一個char變量,然後打印出二進制表示的簡單方法?

例如:字符「X」是由函數取入的參數和「x是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轉換爲字符到二進制 – rags

回答

13

你想要做的是使用按位運算符逐個掩碼位並將它們打印到標準輸出。

  1. A char在C中保證爲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

爲了得到位,我向左移動,以獲得編號位(最高到最低,從而打印很容易),然後掩蓋它。然後我將它翻譯成01!!

+0

這是完美的,正是我一直在尋找! 我會閱讀掩飾班次操作員,以便我完全理解它。 如果你有時間可以解釋一下「最高位掩碼的含義」。用我目前的知識,我並不是100%確定for循環內主線上發生了什麼。 謝謝! – user1783150

+0

@ user1783150高位是第7位,例如, '1000000'中的'1'(也是數字'0x80'或'128')。 – alex

+0

我還是有點好奇,「!!」操作員工作?它是否將任何正數轉換爲「1」並將0保留爲「0」? 谷歌的'「!!」運營商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; 
} 
相關問題