バイナリ形式で印刷するための printf コンバータはありますか? 質問する

バイナリ形式で印刷するための printf コンバータはありますか? 質問する

16 進数または 8 進数として印刷できますprintf。2 進数または任意の基数として印刷するためのフォーマット タグはありますか?

gccを実行しています。

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

ベストアンサー1

ハッキーですが、私にとってはうまくいきます:

#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) がありますが、ここでの他の提案のいくつかにあるメモリの問題と strcat の複数の呼び出しを回避します。

おすすめ記事