我能够用printf做为十六进制或八进制数打印。 是否有格式标记打印为二进制或任意基数? html
我正在运行gcc。 函数
printf("%d %x %o\n", 10, 10, 10); //prints "10 A 12\n" print("%b\n", 10); // prints "%b\n"
此代码应知足您最多64位的需求。 我建立了2个函数pBin&pBinFill。 二者都作一样的事情,可是pBinFill用fillChar填充前导空格。 测试功能生成一些测试数据,而后使用该功能将其打印出来。 测试
char* pBinFill(long int x,char *so, char fillChar); // version with fill char* pBin(long int x, char *so); // version without fill #define kDisplayWidth 64 char* pBin(long int x,char *so) { char s[kDisplayWidth+1]; int i=kDisplayWidth; s[i--]=0x00; // terminate string do { // fill in array from right to left s[i--]=(x & 1) ? '1':'0'; // determine bit x>>=1; // shift right 1 bit } while( x > 0); i++; // point to last valid character sprintf(so,"%s",s+i); // stick it in the temp string string return so; }
char* pBinFill(long int x,char *so, char fillChar) { // fill in array from right to left char s[kDisplayWidth+1]; int i=kDisplayWidth; s[i--]=0x00; // terminate string do { // fill in array from right to left s[i--]=(x & 1) ? '1':'0'; x>>=1; // shift right 1 bit } while( x > 0); while(i>=0) s[i--]=fillChar; // fill with fillChar sprintf(so,"%s",s); return so; }
void test() { char so[kDisplayWidth+1]; // working buffer for pBin long int val=1; do { printf("%ld =\t\t%#lx =\t\t0b%s\n",val,val,pBinFill(val,so,'0')); val*=11; // generate test data } while (val < 100000000); } Output: 00000001 = 0x000001 = 0b00000000000000000000000000000001 00000011 = 0x00000b = 0b00000000000000000000000000001011 00000121 = 0x000079 = 0b00000000000000000000000001111001 00001331 = 0x000533 = 0b00000000000000000000010100110011 00014641 = 0x003931 = 0b00000000000000000011100100110001 00161051 = 0x02751b = 0b00000000000000100111010100011011 01771561 = 0x1b0829 = 0b00000000000110110000100000101001 19487171 = 0x12959c3 = 0b00000001001010010101100111000011
C标准库中没有格式化函数来输出这样的二进制文件。 printf系列支持的全部格式操做都是针对人类可读的文本。 spa
一些运行时支持“%b”,尽管这不是标准。 code
另见这里有趣的讨论: htm
http://bytes.com/forum/thread591027.html 接口
HTH get
没有标准和便携的方式。 string
有些实现提供itoa() ,但它不会出如今大多数状况下,而且它有一些有点糟糕的接口。 但代码在连接后面,应该让你很容易实现本身的格式化程序。 it
一般,glibc中没有二进制转换说明符。
能够将自定义转换类型添加到glibc中的printf()函数系列中。 有关详细信息,请参阅register_printf_function 。 您能够添加自定义%b转换以供本身使用,若是它简化了应用程序代码以使其可用。
如下是如何在glibc中实现自定义printf格式的示例 。