C语言 8字节16进制转10进制 代码
时间: 2024-09-07 12:05:29 浏览: 65
在C语言中,你可以使用字符串处理函数(如`strtol`)结合遍历16进制字符串的循环来完成8字节(通常意味着64位的无符号整型)的16进制数转10进制的过程。以下是简单的示例代码:
```c
#include <stdio.h>
#include <string.h>
long long int hex_to_decimal(const char* hex_str) {
unsigned long long num = 0;
char hex[9]; // 包含前导零和结束符'\0'
strncpy(hex, hex_str, 8); // 截取8字节
hex[8] = '\0'; // 结束符
for (int i = 0; i < 8; ++i) {
switch (hex[i]) {
case '0': case '1': case '2': case '3':
num = num * 16 + hex[i] - '0';
break;
case '4': case '5': case '6': case '7':
num = num * 16 + hex[i] - '4';
break;
case '8': case '9':
num = num * 16 + hex[i] - '8';
break;
case 'a': case 'b': case 'c': case 'd':
num = num * 16 + hex[i] - 'a' + 10;
break;
case 'e': case 'f':
num = num * 16 + hex[i] - 'e' + 10;
break;
default:
printf("Invalid hexadecimal digit found in %s\n", hex_str);
return -1; // 或者抛出异常
}
}
return num;
}
int main() {
const char* hex_num = "FFFFFFFF";
long long int decimal_num = hex_to_decimal(hex_num);
if (decimal_num != ULONG_MAX) { // ULONG_MAX是最大无符号64位整数
printf("Hexadecimal %s is equal to decimal %lld.\n", hex_num, decimal_num);
} else {
printf("Conversion failed.\n");
}
return 0;
}
```
这段代码首先创建一个临时数组存储16进制字符串,并逐个字符解析,将其转换为相应的10进制值。如果遇到无效的十六进制字符,函数会返回-1并打印错误信息。
阅读全文