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 の複数の呼び出しを回避します。