我想要一种非常基本的方法来打印出char的二进制表示。我似乎无法在任何地方找到任何示例代码。
我认为你可以在几行中完成它,但我发现的所有内容都过于冗长和复杂,使用了许多以前没有使用过的函数。 atoi
出现了很多,但并不标准。
是否有一个简单的函数或简单的方法来编写函数来获取char变量然后打印出二进制表示?
例如:char'x'是函数接收的参数,打印出“x is 0111 1000”。
这是一个学校作业,我必须用户输入一个字符串并打印出二进制字符串。我只需要获得将char转换为二进制的基础知识,但我现在正在努力。
答案 0 :(得分:16)
您要做的是使用按位运算符逐个屏蔽这些位并将它们打印到标准输出。
char
保证为1个字节,因此循环到8
。这是一个快速的刺,希望有意义......
main() {
char a = 10;
int i;
for (i = 0; i < 8; i++) {
printf("%d", !!((a << i) & 0x80));
}
printf("\n");
return 0;
}
为了获得该位,我向左移动以获得编号位(从最高到最低,因此打印很容易),然后将其屏蔽掉。然后,我使用0
将其翻译为1
或!!
。
答案 1 :(得分: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));
答案 2 :(得分: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;
}
答案 3 :(得分: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;
}