用strlen()函数输入一个用字符串表示的十六进制数转换成十进制整数。C语言
时间: 2024-05-14 07:16:29 浏览: 212
可以使用C语言中的`strtol()`函数将十六进制字符串转换成十进制整数。具体实现如下:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main() {
char hex[100];
printf("请输入一个十六进制数:");
scanf("%s", hex);
int dec = strtol(hex, NULL, 16);
printf("转换后的十进制数为:%d\n", dec);
return 0;
}
```
在上述代码中,首先使用`scanf()`函数读取一个十六进制字符串,然后使用`strtol()`函数将其转换成十进制整数,并将结果存储在变量`dec`中。最后使用`printf()`函数输出转换后的十进制数。
相关问题
用简单的C语言实现,使用循环和递归方法分别编写函数,实现十六进制整数与十进制整数的相 互转换。 1)键盘输入一个值,以 H 或 D 结束(大小写均可),如 90H、10Ah、703D, 以字符串形式获取到输入 inStr[6](指定最大 5 位十六进制数),如果输入以 H 或 h 结尾,将输入的十六进制数转换为十进制数;如果输入以 D 或 d 结尾,将输入 的十进制数转换为十六进制数。 2)自定义函数 htod(),实现用循环方法将十六进制数转换为十进制数。首 先判断数值位数 n,循环控制每位转换,在第 i( i 从 0 开始)位上,数 k 表示的 大小为 k×16 的 i 次方。将计算值返回主函数。 3)自定义函数 dtoh(),实现用递归法将十进制数转换为十六进制数。用除 以 16 取余法,每次作 num/16 运算,将余数保存,直至商为 0。 4)主函数调用两个函数进行转换。并输出转换结果,来印证算法正确。
好的,以下是一个示例代码,实现了十六进制整数与十进制整数的相互转换:
```c
#include <stdio.h>
#include <string.h>
#include <math.h>
// 将十六进制字符串转换为十进制整数
int htod(char* hex) {
int len = strlen(hex);
int dec = 0;
for (int i = 0; i < len - 1; i++) {
int num = 0;
if (hex[i] >= '0' && hex[i] <= '9') {
num = hex[i] - '0';
} else if (hex[i] >= 'A' && hex[i] <= 'F') {
num = hex[i] - 'A' + 10;
} else if (hex[i] >= 'a' && hex[i] <= 'f') {
num = hex[i] - 'a' + 10;
}
dec += num * pow(16, len - i - 2);
}
return dec;
}
// 将十进制整数转换为十六进制字符串
void dtoh(int dec, char* hex) {
if (dec == 0) {
return;
}
dtoh(dec / 16, hex);
int remainder = dec % 16;
if (remainder < 10) {
sprintf(hex + strlen(hex), "%d", remainder);
} else {
sprintf(hex + strlen(hex), "%c", 'A' + remainder - 10);
}
}
int main() {
char inStr[6];
printf("请输入一个十六进制数或十进制数:");
fgets(inStr, 6, stdin);
int len = strlen(inStr);
if (inStr[len - 2] == 'H' || inStr[len - 2] == 'h') {
// 十六进制转十进制
inStr[len - 2] = '\0';
int dec = htod(inStr);
printf("转换后的十进制数为:%d\n", dec);
} else if (inStr[len - 2] == 'D' || inStr[len - 2] == 'd') {
// 十进制转十六进制
inStr[len - 2] = '\0';
int dec = atoi(inStr);
char hex[10] = "";
dtoh(dec, hex);
printf("转换后的十六进制数为:%sH\n", hex);
} else {
printf("无法识别的输入!\n");
}
return 0;
}
```
这个程序使用了自定义的 `htod()` 函数和 `dtoh()` 函数,分别实现了十六进制转十进制和十进制转十六进制的功能。在主函数中,先通过判断输入的字符串的最后一个字符来确定要进行的转换,然后分别调用对应的函数进行转换,并输出转换结果。
用函数实现将一个以字符串形式表示的十六进制数转换为一个十进制整数。例如,输入”A2”转换为162。
要将一个十六进制字符串转换为十进制整数,你可以编写一个C语言函数,该函数遍历字符串中的每个字符,根据其对应的十六进制值(0-9对应10, A-F对应10-15)相加得到结果。这里有一个简单的函数示例:
```c
#include <stdio.h>
#include <string.h>
// 十六进制到十进制的映射表
const int hex_to_dec[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15};
int hex_to_decimal(const char *hex_string) {
int decimal = 0;
int power = 0;
// 遍历字符串,从后往前,因为高位优先
for (int i = strlen(hex_string) - 1; i >= 0; i--) {
if (hex_string[i] >= '0' && hex_string[i] <= '9') {
decimal += hex_to_dec[hex_string[i] - '0'] * pow(16, power);
} else if (hex_string[i] >= 'a' && hex_string[i] <= 'f') {
decimal += hex_to_dec[hex_string[i] - 'a' + 10] * pow(16, power);
} else if (hex_string[i] >= 'A' && hex_string[i] <= 'F') {
decimal += hex_to_dec[hex_string[i] - 'A' + 10] * pow(16, power);
}
power++;
}
return decimal;
}
int main() {
const char *input = "A2";
int result = hex_to_decimal(input);
printf("Hexadecimal number %s is equal to decimal number %d\n", input, result);
return 0;
}
```
这个`hex_to_decimal`函数接受一个十六进制字符串作为参数,然后返回相应的十进制数值。主函数中使用了一个例子来测试此功能。
阅读全文
相关推荐














