存儲在一個字符串,其空間是多少由複合文字提供(自C99起可用)。
它的工作原理類似於OP的流程:循環至sizeof(int) * 8
次,找到1位的值並打印/保存。
#include <stdio.h>
#include <stdlib.h>
#include <limits.h>
// Maximum buffer size needed
#define UTOA_BASE_2 (sizeof(unsigned)*CHAR_BIT + 1)
char *utoa_base2(char *s, unsigned x) {
s += UTOA_BASE_2 - 1;
*s = '\0';
do {
*(--s) = "01"[x % 2];
x /= 2;
} while (x);
return s;
}
#define TO_BASE2(x) utoa_base2((char [UTOA_BASE_2]){0} , (x))
void test(unsigned x) {
printf("base10:%10u base2:%5s ", x, TO_BASE2(x));
char *s = TO_BASE2(x);
// do stuff with `s`, it is valid for until the end of this block
printf("%s\n", s);
}
int main(void) {
test(0);
test(25);
test(UINT_MAX);
}
樣本輸出
base10: 0 base2: 0 0
base10: 25 base2:11001 11001
base10:4294967295 base2:11111111111111111111111111111111 11111111111111111111111111111111
這是此base-n answer的變體。
你在「n」和它的二進制表示經過數是在同一個,因爲他們都存儲爲'0'的和'1記憶中。如果我理解你的問題,那麼你不需要先傳遞給'hex2bin',你只需要分析基數而不是以任何你選擇的方式傳遞給'printf'。這種方法本質上是一致的,但是你必須小心你的位順序(這與打印順序相反) –