C中打印位的格式

时间:2015-07-29 07:49:33

标签: c format bits

我正在从事多线程项目。这完全是关于机器人的迷宫。现在,我需要将chRobotCmdStatus的值转换为8位格式。 chRobotCmdStatus是一个全局变量。

这是我的代码:

void charToBit(char character)
{
    char output[9] = "00000000";
    itoa(character, output, 2);
    printf("%s\n", output);
}

// Control Thread
unsigned int __stdcall ControlThread(void* arg){
    printf("Control Thread 1 \n");
    printf("\n VALUE OF: %d", gchRobotCmdStatus);
    charToBit(gchRobotCmdStatus);

    return 1;
}

输出:

VALUE OF: 00

需要:

VALUE OF: 0000 0000

有关如何实现这一目标的任何建议?

6 个答案:

答案 0 :(得分:2)

void charToBit(char ch)
{
    for (int i = 7; i >= 0; --i)
    {
        putchar( (ch & (1 << i)) ? '1' : '0' );
    }
    putchar('\n');
}

答案 1 :(得分:1)

您可以使用printf()flagfield width属性。假设gchRobotCmdStatusint并且保存您要以8位模式打印的二进制表示,您可以使用,例如,

 printf("\n VALUE OF: %08d", gchRobotCmdStatus);

打印

  

价值观:0000 0000

答案 2 :(得分:1)

我刚从

改变了我的功能
void charToBit(char character)
{
    char output[9] = "00000000";
    itoa(character, output, 2);
    printf("%s\n", output);
}

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

它有效。

答案 3 :(得分:0)

我认为您应该将%d替换为%s中的printf

答案 4 :(得分:0)

itoa(character, output, 2); 

这将在为字符串生成2个字节后放置一个空终止符。

您需要一种将二进制值转换为字符串的不同方法。

答案 5 :(得分:0)

这会产生所需的输出:

void charToBit(char ch)
{
    static char* bits[] = 
    {
        "0000", "0001", "0010", "0011", "0100", "0101", "0110", "0111",
        "1000", "1001", "1010", "1011", "1100", "1101", "1110", "1111"
    };
    printf("%s %s\n", bits[ch >> 4 & 0xf], bits[ch & 0xf]);
}