#include <stdio.h>
#include <string.h>
#include <stdlib.h>
char *get2string(int num)
{
char *buffer = NULL, *temp = NULL;
int i = 0;
buffer = (char*)malloc(33); // 申請32字節長度char空間,用來存儲32bit的2進制字符串
temp = buffer;
for (; i < 32; i++)
{
// 從第31bit開始依次獲取num的二進制位值是0還是1
temp[i] = num & (1 << (31-i)); // 獲取第 31-i 位的二進制bit值
temp[i] = temp[i] >> (31-i); // 將第 31-i 位值放在temp對應的位上
temp[i] = (temp[i] == 0) ? '0' : '1'; // 將第 31-i 位值從數值轉換爲字符
}
buffer[32] = '\0';
return buffer;
}
char *get16String(int num)
{
char *buffer = NULL, *temp = buffer;
int i = 0;
buffer = (char*)malloc(11); // 申請容納16進制字符串的空間(0xFFFFFFFF)
buffer[0] = '0';
buffer[1] = 'x';
buffer[10] = '\0';
temp = buffer + 2;
for (; i < 8; i++)
{
// 每次取num的4個bit計算16進制
temp[i] = (char)(num << (4 * i) >> 28);
temp[i] = temp[i] >= 0 ? temp[i] : temp[i] + 16;
temp[i] = temp[i] < 10 ? temp[i] + 48 : temp[i] + 55; // 轉換爲 ABCDEF 或者 0-9
}
return buffer;
}
int main()
{
char *p = NULL, *q = NULL;
int num = 6555894;
p = get2string(num);
q = get16String(num);
printf("bin: %s\n", p);
printf("hex: %s\n", q);
free(p);
free(q);
return 0;
}