C语言 十六进制整数字符串转十进制整数
时间: 2023-09-15 12:17:57 浏览: 99
可以使用sscanf函数将十六进制整数字符串转换为十进制整数。
示例代码:
```c
#include <stdio.h>
int main() {
char hex_str[] = "1A";
int decimal_num;
sscanf(hex_str, "%x", &decimal_num);
printf("Hexadecimal string %s in decimal is %d\n", hex_str, decimal_num);
return 0;
}
```
输出:
```
Hexadecimal string 1A in decimal is 26
```
在sscanf中,%x表示读取十六进制整数,将其转换为十进制整数存储在decimal_num变量中。
相关问题
c语言十进制整数转二进制以字符串形式输出
在C语言中,将十进制整数转换成二进制并以字符串形式输出,可以使用库函数`itoa()`或者自定义一个递归函数实现。这里我将介绍一种常见的手动方法,即使用除2取余法:
```c
#include <stdio.h>
#include <stdlib.h> // 包含itoa函数所在的头文件
// 自定义函数将十进制转换为二进制字符串
char* decimal_to_binary(int num) {
char binary[33]; // 存储结果的数组,最大支持32位整数
if (num == 0) {
binary[0] = '0';
return binary;
}
int i = 0;
while (num > 0) {
binary[i++] = num % 2 + '0'; // 将余数加一转为字符(ASCII)
num /= 2; // 向左移位
}
// 如果最开始有前导零,则不需要补零
binary[i] = '\0';
reverse(binary); // 反转字符串,因为一开始是从低位到高位存储的
return binary;
}
// 用于反转字符串的辅助函数
void reverse(char *str) {
int start = 0, end = strlen(str) - 1;
while (start < end) {
char temp = str[start];
str[start] = str[end];
str[end] = temp;
start++;
end--;
}
}
int main() {
int decimal = 42;
char *binary_str = decimal_to_binary(decimal);
printf("十进制 %d 转换成二进制为: %s\n", decimal, binary_str);
free(binary_str); // 注意释放内存
return 0;
}
```
C语言将十六进制字符串转为十进制数值
在C语言中,将十六进制字符串转换成十进制数值通常需要通过遍历字符串、逐位计算然后累加的过程。这里可以借助标准库函数如`strtol()`或`strtoul()`,它们能够处理这种字符串到整数的转换。
```c
#include <stdio.h>
#include <stdlib.h>
long long int hex_to_decimal(const char *hex_str) {
long long int decimal_value = 0;
char *endptr;
for (int i = 0; hex_str[i]; ++i) {
if (hex_str[i] >= '0' && hex_str[i] <= '9') { // 十六进制数字0-9
decimal_value = decimal_value * 16 + hex_str[i] - '0';
} else if (hex_str[i] >= 'a' && hex_str[i] <= 'f') { // 十六进制数字A-F
decimal_value = decimal_value * 16 + hex_str[i] - 'a' + 10;
} else if (hex_str[i] >= 'A' && hex_str[i] <= 'F') { // 十六进制数字A-F大写
decimal_value = decimal_value * 16 + hex_str[i] - 'A' + 10;
} else {
// 如果遇到非十六进制字符,则返回错误值或抛出异常
return -1; // 或者你可以选择终止程序并输出错误信息
}
}
endptr = strtol(hex_str, &endptr, 16);
if (*endptr != '\0') {
// 如果不是完整的十六进制串,则返回错误值
return -1;
}
return decimal_value;
}
int main() {
const char* hexStr = "FF";
long long int decimal = hex_to_decimal(hexStr);
if (decimal >= 0) {
printf("Hexadecimal %s is equal to decimal value %lld\n", hexStr, decimal);
} else {
printf("Invalid hexadecimal string.\n");
}
return 0;
}
阅读全文
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20241231044930.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)