C语言十进制转十六进制函数如何实现?

99ANYc3cd6
预计阅读时长 9 分钟
位置: 首页 C语言 正文

方法1:使用标准库函数 sprintf

#include <stdio.h>
void decimalToHex(int num, char *hexStr) {
    sprintf(hexStr, "%X", num); // %X 表示大写十六进制,%x 表示小写
}
int main() {
    int decimal = 255;
    char hexStr[20]; // 存储十六进制字符串
    decimalToHex(decimal, hexStr);
    printf("十进制 %d 的十六进制表示为: %s\n", decimal, hexStr);
    return 0;
}

说明

c语言十进制转十六进制函数
(图片来源网络,侵删)
  • sprintf 将格式化后的十六进制字符串写入 hexStr
  • %X 输出大写字母(如 FF),%x 输出小写字母(如 ff)。
  • 需确保 hexStr 有足够空间(sizeof(int)*2 + 1 足够)。

方法2:手动转换(不依赖库函数)

#include <stdio.h>
void decimalToHex(int num, char *hexStr) {
    const char hexDigits[] = "0123456789ABCDEF";
    int i = 0;
    if (num == 0) {
        hexStr[i++] = '0';
    } else {
        while (num > 0) {
            hexStr[i++] = hexDigits[num % 16];
            num /= 16;
        }
    }
    hexStr[i] = '\0'; // 字符串结束符
    // 反转字符串(因为是从低位到高位计算的)
    for (int j = 0; j < i / 2; j++) {
        char temp = hexStr[j];
        hexStr[j] = hexStr[i - j - 1];
        hexStr[i - j - 1] = temp;
    }
}
int main() {
    int decimal = 255;
    char hexStr[20];
    decimalToHex(decimal, hexStr);
    printf("十进制 %d 的十六进制表示为: %s\n", decimal, hexStr);
    return 0;
}

说明

  1. 通过模16运算获取每一位的十六进制字符。
  2. 由于计算顺序是低位到高位,最后需要反转字符串。
  3. 处理了 num=0 的特殊情况。

方法3:递归实现(简洁但效率较低)

#include <stdio.h>
void decimalToHexRecursive(int num, char *hexStr, int *index) {
    if (num > 15) {
        decimalToHexRecursive(num / 16, hexStr, index);
    }
    const char hexDigits[] = "0123456789ABCDEF";
    hexStr[(*index)++] = hexDigits[num % 16];
}
void decimalToHex(int num, char *hexStr) {
    int index = 0;
    if (num == 0) {
        hexStr[index++] = '0';
    } else {
        decimalToHexRecursive(num, hexStr, &index);
    }
    hexStr[index] = '\0';
}
int main() {
    int decimal = 255;
    char hexStr[20];
    decimalToHex(decimal, hexStr);
    printf("十进制 %d 的十六进制表示为: %s\n", decimal, hexStr);
    return 0;
}

说明

  • 递归调用自然实现高位到低位的顺序,无需反转字符串。
  • 通过指针参数 index 记录当前写入位置。

注意事项

  1. 负数处理
    C语言中负数以补码形式存储,直接转换会得到无意义的十六进制,若需处理负数,需先转换为无符号数:

    unsigned int unsignedNum = (unsigned int)num;
  2. 前缀 "0x"
    若需要在十六进制字符串前加 0x,可在 sprintf 中使用 "0X%X",或在手动转换时手动添加。

    c语言十进制转十六进制函数
    (图片来源网络,侵删)
  3. 大数处理
    对于 long long 类型,使用 %llX 或调整循环逻辑。


示例输出

对于输入 255,所有方法均输出:

十进制 255 的十六进制表示为: FF
c语言十进制转十六进制函数
(图片来源网络,侵删)
-- 展开阅读全文 --
头像
dede多条件筛选插件如何安装配置?
« 上一篇 今天
dede文章分页符乱码
下一篇 » 今天
取消
微信二维码
支付宝二维码

目录[+]