方法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;
}
关键点说明:
sprintf方法:最简单直接,适合快速实现。- 手动转换:适合理解转换原理,但需要处理负数和字符串反转。
- 位运算优化:通过
& 0xF和>> 4提高效率,适合嵌入式或性能敏感场景。
注意事项:
- 负数在计算机中以补码形式存储,需特殊处理。
- 十六进制字符串的长度需足够(如
int最大为0xFFFFFFFF,需9字符 +\0)。 - 大小写:
%X/'A'-'F'为大写,%x/'a'-'f'为小写。
选择合适的方法即可!

(图片来源网络,侵删)

(图片来源网络,侵删)
