C语言十进制转十六进制函数
以下是一个将十进制数转换为十六进制字符串的C语言函数:

(图片来源网络,侵删)
#include <stdio.h>
#include <stdlib.h>
char* decimalToHex(int decimal) {
// 分配足够的内存来存储十六进制字符串(包括可能的负号和空终止符)
char* hexStr = (char*)malloc(sizeof(char) * 9); // 最多8位十六进制数 + 空字符
if (hexStr == NULL) {
return NULL; // 内存分配失败
}
sprintf(hexStr, "%X", decimal); // 使用%X格式说明符转换为十六进制
return hexStr;
}
// 使用示例
int main() {
int num = 255;
char* hex = decimalToHex(num);
if (hex != NULL) {
printf("十进制 %d 转换为十六进制: %s\n", num, hex);
free(hex); // 记得释放分配的内存
}
return 0;
}
替代实现(不使用sprintf)
如果你不想使用sprintf,这里有一个手动实现的版本:
#include <stdlib.h>
char* decimalToHexManual(int decimal) {
// 分配足够的内存来存储十六进制字符串
char* hexStr = (char*)malloc(sizeof(char) * 9);
if (hexStr == NULL) {
return NULL;
}
// 处理0的特殊情况
if (decimal == 0) {
hexStr[0] = '0';
hexStr[1] = '\0';
return hexStr;
}
int isNegative = 0;
unsigned int num;
// 处理负数
if (decimal < 0) {
isNegative = 1;
num = (unsigned int)(-decimal);
} else {
num = (unsigned int)decimal;
}
int i = 0;
while (num != 0) {
int temp = num % 16;
if (temp < 10) {
hexStr[i++] = temp + '0';
} else {
hexStr[i++] = temp - 10 + 'A';
}
num /= 16;
}
// 添加负号(如果需要)
if (isNegative) {
hexStr[i++] = '-';
}
hexStr[i] = '\0';
// 反转字符串
int start = 0;
int end = i - 1;
while (start < end) {
char temp = hexStr[start];
hexStr[start] = hexStr[end];
hexStr[end] = temp;
start++;
end--;
}
return hexStr;
}
注意事项
- 第一个实现使用了sprintf,更简洁但依赖于标准库函数
- 第二个实现是手动转换,展示了转换的基本原理
- 两个函数都返回动态分配的内存,调用者需要负责释放
- 对于大数或特殊需求,可能需要调整内存分配大小
- 如果不需要字符串形式,可以直接使用printf的%X格式说明符输出

(图片来源网络,侵删)
