是否有printf轉換器以二進制格式打印?

我能夠用printf做爲十六進制或八進制數打印。 是否有格式標記打印爲二進制或任意基數? html

我正在運行gcc。 函數

printf("%d %x %o\n", 10, 10, 10); //prints "10 A 12\n"
print("%b\n", 10); // prints "%b\n"

#1樓

此代碼應知足您最多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

#2樓

C標準庫中沒有格式化函數來輸出這樣的二進制文件。 printf系列支持的全部格式操做都是針對人類可讀的文本。 spa


#3樓

一些運行時支持「%b」,儘管這不是標準。 code

另見這裏有趣的討論: htm

http://bytes.com/forum/thread591027.html 接口

HTH get


#4樓

沒有標準和便攜的方式。 string

有些實現提供itoa() ,但它不會出如今大多數狀況下,而且它有一些有點糟糕的接口。 但代碼在連接後面,應該讓你很容易實現本身的格式化程序。 it


#5樓

一般,glibc中沒有二進制轉換說明符。

能夠將自定義轉換類型添加到glibc中的printf()函數系列中。 有關詳細信息,請參閱register_printf_function 。 您能夠添加自定義%b轉換以供本身使用,若是它簡化了應用程序代碼以使其可用。

如下是如何在glibc中實現自定義printf格式的示例

相關文章
相關標籤/搜索