写一个自定义函数,将输入的十六进制数转换成十进制数并输出,用c
时间: 2024-02-27 22:53:48 浏览: 293
可以使用C语言中的 `strtol()` 函数将十六进制字符串转换成十进制数,如下所示:
```c
#include <stdio.h>
#include <stdlib.h>
int main() {
char hex[10];
printf("请输入一个十六进制数:");
scanf("%s", hex);
long decimal = strtol(hex, NULL, 16);
printf("对应的十进制数为:%ld\n", decimal);
return 0;
}
```
解释一下上面的代码:
- 首先定义一个长度为 10 的字符数组 `hex`,用来存储输入的十六进制字符串。
- 然后通过 `scanf()` 函数获取用户输入的十六进制字符串,存储到 `hex` 数组中。
- 调用 `strtol()` 函数将 `hex` 数组中的十六进制字符串转换成十进制数,并存储到 `decimal` 变量中。
- 最后使用 `printf()` 函数输出转换后的十进制数。
需要注意的是,`strtol()` 函数的第二个参数可以传入一个指针,用来存储转换后的字符串的结束位置。在这个例子中,我们不需要使用这个参数,所以传入了 `NULL`。第三个参数是进制数,这里传入了 `16`,表示输入的是十六进制数。如果需要转换其他进制的数,可以修改这个参数的值。
相关问题
用简单的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()` 函数,分别实现了十六进制转十进制和十进制转十六进制的功能。在主函数中,先通过判断输入的字符串的最后一个字符来确定要进行的转换,然后分别调用对应的函数进行转换,并输出转换结果。
3. 使用循环和递归方法分别编写函数,实现十六进制整数与十进制整数的相 互转换。 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 <iostream>
#include <cstring>
#include <cmath>
using namespace std;
// 十六进制转十进制,循环方法
int htod(char* str) {
int len = strlen(str);
int result = 0;
for (int i = 0; i < len - 1; i++) {
int num = 0;
if (str[i] >= '0' && str[i] <= '9') {
num = str[i] - '0';
} else if (str[i] >= 'A' && str[i] <= 'F') {
num = str[i] - 'A' + 10;
} else if (str[i] >= 'a' && str[i] <= 'f') {
num = str[i] - 'a' + 10;
}
result += num * pow(16, len - i - 2);
}
return result;
}
// 十进制转十六进制,递归方法
void dtoh(int num) {
if (num == 0) {
return;
}
dtoh(num / 16);
int remainder = num % 16;
if (remainder >= 10) {
cout << (char)('A' + remainder - 10);
} else {
cout << remainder;
}
}
int main() {
char inStr[6];
cin >> inStr;
int len = strlen(inStr);
if (inStr[len - 1] == 'H' || inStr[len - 1] == 'h') {
int result = htod(inStr);
cout << result << endl;
} else if (inStr[len - 1] == 'D' || inStr[len - 1] == 'd') {
int num = atoi(inStr);
dtoh(num);
cout << endl;
}
return 0;
}
```
在主函数中,首先读入输入的字符串,判断最后一位是 H 还是 D,从而确定是执行十六进制转十进制还是十进制转十六进制的操作。如果是十六进制转十进制,调用 htod 函数,如果是十进制转十六进制,则调用 dtoh 函数。
在 htod 函数中,使用循环的方式将十六进制数转换为十进制数。首先获取字符串的长度,然后从第一位开始循环,计算每一位代表的十进制数,乘以相应的权值,最后将所有位的值相加得到结果。
在 dtoh 函数中,使用递归的方式将十进制数转换为十六进制数。首先判断当前数值是否为 0,如果不是,则继续递归,并将余数保存。在递归回到上一层时,输出余数对应的十六进制字符。
运行代码,可以输入以下测试数据:
```
90H
703D
255D
10Ah
```
得到的输出结果分别为:
```
144
1795
FF
266
```
这说明代码实现了正确的转换算法。
阅读全文