C语言如何将十进制转为十六进制?

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

方法1:使用标准库函数 printf(最简单)

直接使用 printf 的格式说明符 %x%X 可以直接输出十进制数的十六进制表示。

c语言十进制转化为十六进制
(图片来源网络,侵删)
#include <stdio.h>
int main() {
    int decimal = 255;
    // 小写十六进制
    printf("小写十六进制: %x\n", decimal);  // 输出: ff
    // 大写十六进制
    printf("大写十六进制: %X\n", decimal);  // 输出: FF
    return 0;
}

方法2:手动转换算法(适用于理解原理)

如果需要手动实现转换,可以按照以下步骤:

  1. 除16取余法:不断将十进制数除以16,记录余数,直到商为0。
  2. 余数转十六进制字符:余数在0-9时直接输出,10-15时转换为 a-fA-F
  3. 逆序输出余数:将余数序列逆序排列即为十六进制结果。

示例代码:

#include <stdio.h>
void decimalToHex(int num) {
    if (num == 0) {
        printf("0");
        return;
    }
    // 处理负数(补码表示)
    if (num < 0) {
        printf("-");
        num = -num;
    }
    char hexDigits[] = "0123456789ABCDEF";
    char hex[20]; // 存储十六进制字符
    int i = 0;
    // 转换为十六进制(逆序存储)
    while (num > 0) {
        hex[i++] = hexDigits[num % 16];
        num /= 16;
    }
    // 逆序输出
    for (int j = i - 1; j >= 0; j--) {
        printf("%c", hex[j]);
    }
}
int main() {
    int decimal = 255;
    printf("十进制 %d 的十六进制是: ", decimal);
    decimalToHex(decimal);  // 输出: FF
    printf("\n");
    decimal = -42;
    printf("十进制 %d 的十六进制是: ", decimal);
    decimalToHex(decimal);  // 输出: -2A
    printf("\n");
    return 0;
}

方法3:使用 sprintf 存储到字符串

如果需要将结果存储到字符串中,可以使用 sprintf

#include <stdio.h>
int main() {
    int decimal = 255;
    char hexString[20];
    // 小写十六进制
    sprintf(hexString, "%x", decimal);
    printf("小写十六进制字符串: %s\n", hexString);  // 输出: ff
    // 大写十六进制
    sprintf(hexString, "%X", decimal);
    printf("大写十六进制字符串: %s\n", hexString);  // 输出: FF
    return 0;
}

方法4:使用位运算(高效转换)

通过位运算直接提取每个十六进制位:

#include <stdio.h>
void decimalToHexBitwise(int num) {
    if (num == 0) {
        printf("0");
        return;
    }
    char hexDigits[] = "0123456789ABCDEF";
    char hex[20];
    int i = 0;
    // 处理负数
    unsigned int unum = (unsigned int)num;
    while (unum > 0) {
        hex[i++] = hexDigits[unum & 0xF]; // 取低4位
        unum >>= 4; // 右移4位
    }
    // 逆序输出
    for (int j = i - 1; j >= 0; j--) {
        printf("%c", hex[j]);
    }
}
int main() {
    int decimal = 255;
    printf("十进制 %d 的十六进制是: ", decimal);
    decimalToHexBitwise(decimal);  // 输出: FF
    printf("\n");
    return 0;
}

方法 适用场景 特点
printf 直接输出结果 最简单,无需额外代码
手动转换算法 学习原理或自定义格式 灵活,可处理负数
sprintf 需要将结果存储到字符串 直接生成字符串
位运算 高性能需求(如嵌入式开发) 效率高,适合无符号数

根据实际需求选择合适的方法即可。

c语言十进制转化为十六进制
(图片来源网络,侵删)
c语言十进制转化为十六进制
(图片来源网络,侵删)
-- 展开阅读全文 --
头像
dede模板批量编辑器如何高效批量编辑?
« 上一篇 03-07
dede文章自定义属性如何设置?
下一篇 » 03-07

相关文章

取消
微信二维码
支付宝二维码

目录[+]