13

我想要一种非常基本的方法来打印出 char 的二进制表示。我似乎在任何地方都找不到任何示例代码。

我以为你可以用几行代码完成,但我发现的所有内容都过于冗长和复杂,需要使用很多我以前没有使用过的函数。atoi出现了很多,但它不是标准的。

是否有一个简单的函数或简单的方法来编写一个函数来获取一个 char 变量,然后打印出一个二进制表示?

例如:char 'x' 是函数传入的参数,打印出“x is 0111 1000”。

这是一个学校作业,我必须接受用户输入的字符串并以二进制形式打印出字符串。我只需要了解将 char 转换为二进制的基础知识,但我现在正在苦苦挣扎。

4

4 回答 4

23

您想要做的是使用按位运算符逐位屏蔽这些位并将它们打印到标准输出。

  1. C 中的Achar保证为 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;
}

键盘

为了获得该位,我向左移动以获取编号位(从最高到最低,因此打印很容易),然后将其屏蔽。然后我将其翻译为01使用!!.

于 2013-08-20T05:18:22.433 回答
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));
于 2013-08-20T05:18:37.023 回答
2
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;
}
于 2013-08-20T05:19:51.730 回答
1

尝试这个:-

#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;
}
于 2013-08-20T05:22:02.553 回答