是否有打印二进制格式的printf转换器?
我可以使用printf作为十六进制或八进制数进行打印。 是否有格式标签打印为二进制或任意的基地?
我正在运行gcc。
printf("%d %x %on", 10, 10, 10); //prints "10 A 12n"
print("%bn", 10); // prints "%bn"
哈克,但为我工作:
#define BYTE_TO_BINARY_PATTERN "%c%c%c%c%c%c%c%c"
#define BYTE_TO_BINARY(byte)
(byte & 0x80 ? '1' : '0'),
(byte & 0x40 ? '1' : '0'),
(byte & 0x20 ? '1' : '0'),
(byte & 0x10 ? '1' : '0'),
(byte & 0x08 ? '1' : '0'),
(byte & 0x04 ? '1' : '0'),
(byte & 0x02 ? '1' : '0'),
(byte & 0x01 ? '1' : '0')
printf("Leading text "BYTE_TO_BINARY_PATTERN, BYTE_TO_BINARY(byte));
对于多字节类型
printf("m: "BYTE_TO_BINARY_PATTERN" "BYTE_TO_BINARY_PATTERN"n",
BYTE_TO_BINARY(m>>8), BYTE_TO_BINARY(m));
不幸的是你需要所有额外的引号。 这种方法存在宏的效率风险(不要将函数作为BYTE_TO_BINARY
的参数BYTE_TO_BINARY
),但是可以避免这里的一些其他提议中的内存问题和多个strcat的调用。
为任何数据类型打印二进制文件
//assumes little endian
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] >> j) & 1;
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;
}
这里是一个简单的黑客来演示技术来做你想做的事情。
#include <stdio.h> /* printf */
#include <string.h> /* strcat */
#include <stdlib.h> /* strtol */
const char *byte_to_binary(int x)
{
static char b[9];
b[0] = ' ';
int z;
for (z = 128; z > 0; z >>= 1)
{
strcat(b, ((x & z) == z) ? "1" : "0");
}
return b;
}
int main(void)
{
{
/* binary string to int */
char *tmp;
char *b = "0101";
printf("%dn", strtol(b, &tmp, 2));
}
{
/* byte to binary string */
printf("%sn", byte_to_binary(5));
}
return 0;
}
链接地址: http://www.djcxy.com/p/72211.html
上一篇: Is there a printf converter to print in binary format?
下一篇: Cross platform format string for variables of type size