方法1:使用标准库函数 printf(最简单)
直接使用 printf 的格式说明符 %x 或 %X 可以直接输出十进制数的十六进制表示。

(图片来源网络,侵删)
#include <stdio.h>
int main() {
int decimal = 255;
// 小写十六进制
printf("小写十六进制: %x\n", decimal); // 输出: ff
// 大写十六进制
printf("大写十六进制: %X\n", decimal); // 输出: FF
return 0;
}
方法2:手动转换算法(适用于理解原理)
如果需要手动实现转换,可以按照以下步骤:
- 除16取余法:不断将十进制数除以16,记录余数,直到商为0。
- 余数转十六进制字符:余数在0-9时直接输出,10-15时转换为
a-f或A-F。 - 逆序输出余数:将余数序列逆序排列即为十六进制结果。
示例代码:
#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 |
需要将结果存储到字符串 | 直接生成字符串 |
| 位运算 | 高性能需求(如嵌入式开发) | 效率高,适合无符号数 |
根据实际需求选择合适的方法即可。

(图片来源网络,侵删)

(图片来源网络,侵删)
