是否有打印二进制格式的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