c语言十六进制转换八,十进制
时间: 2024-09-29 20:11:44 浏览: 62
C语言 进制转换
在C语言中,将十六进制数转换成八进制或十进制可以使用标准库函数`itoa()`、`octal()`或者自定义算法实现。以下是基本步骤:
**十六进制转八进制:**
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// 自定义函数将十六进制字符串转换为八进制字符串
char* hex_to_oct(char* hex_str) {
int len = strlen(hex_str);
char oct_str[len * 3 + 1]; // 预计八进制数字会比十六进制多一位
memset(oct_str, '0', sizeof(oct_str)); // 初始化为0防止溢出
for (int i = 0; i < len; i++) {
char digit = hex_str[i];
if (digit >= '0' && digit <= '9') {
oct_str[i * 3] = digit - '0';
} else if (digit >= 'A' && digit <= 'F') { // A-F对应的数值是10-15
oct_str[i * 3] = digit - 'A' + 10;
} else if (digit >= 'a' && digit <= 'f') { // a-f对应的数值是10-15
oct_str[i * 3] = digit - 'a' + 10;
}
oct_str[i * 3 + 1] = '\0'; // 每位八进制后跟空字符分隔
}
return oct_str;
}
int main() {
char hex_num[] = "1A"; // 示例十六进制数
char* oct_num = hex_to_oct(hex_num);
printf("Hex: %s\nOct: %s\n", hex_num, oct_num); // 输出结果
free(oct_num); // 释放内存
return 0;
}
```
**十六进制转十进制:**
```c
#include <stdio.h>
#include <string.h>
#include <ctype.h>
// 自定义函数将十六进制字符串转换为整数
int hex_to_decimal(const char* hex_str) {
int decimal = 0;
const char* ptr = hex_str;
while (*ptr != '\0') {
int digit;
if (isdigit(*ptr)) {
digit = *ptr - '0';
} else if (isupper(*ptr)) {
digit = tolower(*ptr) - 'a' + 10;
} else if (islower(*ptr)) {
digit = *ptr - 'a' + 10;
} else {
continue; // 非十六进制字符忽略
}
decimal = decimal * 16 + digit;
ptr++;
}
return decimal;
}
int main() {
char hex_num[] = "1A";
int dec_num = hex_to_decimal(hex_num);
printf("Hex: %s\nDecimal: %d\n", hex_num, dec_num);
return 0;
}
```
阅读全文