我正在从事多线程项目。这完全是关于机器人的迷宫。现在,我需要将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
有关如何实现这一目标的任何建议?
答案 0 :(得分:2)
void charToBit(char ch)
{
for (int i = 7; i >= 0; --i)
{
putchar( (ch & (1 << i)) ? '1' : '0' );
}
putchar('\n');
}
答案 1 :(得分:1)
您可以使用printf()
的flag
和field width
属性。假设gchRobotCmdStatus
是int
并且保存您要以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]);
}