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

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

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

#include <stdio.h>
#include <stdlib.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;
}

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

#include <stdio.h>
#include <string.h>
void decimalToHex(int num, char *hexStr) {
    char temp[20];
    int i = 0, j;
    if (num == 0) {
        strcpy(hexStr, "0");
        return;
    }
    // 处理负数(补码表示)
    if (num < 0) {
        num = ~num + 1; // 取补码
    }
    while (num != 0) {
        int remainder = num % 16;
        temp[i++] = (remainder < 10) ? (remainder + '0') : (remainder - 10 + 'A');
        num /= 16;
    }
    temp[i] = '\0';
    // 反转字符串
    for (j = 0; j < i / 2; j++) {
        char t = temp[j];
        temp[j] = temp[i - j - 1];
        temp[i - j - 1] = t;
    }
    strcpy(hexStr, temp);
}
int main() {
    int decimal = -255;
    char hexStr[20];
    decimalToHex(decimal, hexStr);
    printf("十进制 %d 的十六进制是: %s\n", decimal, hexStr);
    return 0;
}

方法3:使用位运算优化(更高效)

#include <stdio.h>
#include <string.h>
void decimalToHex(int num, char *hexStr) {
    const char hexDigits[] = "0123456789ABCDEF";
    char temp[20];
    int i = 0, j;
    if (num == 0) {
        strcpy(hexStr, "0");
        return;
    }
    // 处理负数
    if (num < 0) {
        num = ~num + 1;
    }
    while (num != 0) {
        temp[i++] = hexDigits[num & 0xF]; // 取低4位
        num >>= 4; // 右移4位
    }
    temp[i] = '\0';
    // 反转字符串
    for (j = 0; j < i / 2; j++) {
        char t = temp[j];
        temp[j] = temp[i - j - 1];
        temp[i - j - 1] = t;
    }
    strcpy(hexStr, temp);
}
int main() {
    int decimal = 255;
    char hexStr[20];
    decimalToHex(decimal, hexStr);
    printf("十进制 %d 的十六进制是: %s\n", decimal, hexStr);
    return 0;
}

关键点说明:

  1. sprintf 方法:最简单直接,适合快速实现。
  2. 手动转换:适合理解转换原理,但需要处理负数和字符串反转。
  3. 位运算优化:通过 & 0xF>> 4 提高效率,适合嵌入式或性能敏感场景。

注意事项:

  • 负数在计算机中以补码形式存储,需特殊处理。
  • 十六进制字符串的长度需足够(如 int 最大为 0xFFFFFFFF,需9字符 + \0)。
  • 大小写:%X/'A'-'F' 为大写,%x/'a'-'f' 为小写。

选择合适的方法即可!

c语言 十进制转十六进制 函数
(图片来源网络,侵删)
c语言 十进制转十六进制 函数
(图片来源网络,侵删)
-- 展开阅读全文 --
头像
dede手机端定位失败?如何解决?
« 上一篇 01-11
dede如何禁止一个IP访问?
下一篇 » 01-11
取消
微信二维码
支付宝二维码

目录[+]