二进制和16进制字符串转换

#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;
}

 

发布了10 篇原创文章 · 获赞 0 · 访问量 1153
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章