我能夠用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格式的示例 。