用strlen()函数输入一个用字符串表示的十六进制数转换成十进制整数。C语言
时间: 2024-05-14 14:16:29 浏览: 181
可以使用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()` 函数,分别实现了十六进制转十进制和十进制转十六进制的功能。在主函数中,先通过判断输入的字符串的最后一个字符来确定要进行的转换,然后分别调用对应的函数进行转换,并输出转换结果。
用C语言写出代码十六进制字符串转十进制负整数PTA
以下是用C语言实现将十六进制字符串转换为十进制负整数的代码:
```c
#include<stdio.h>
#include<string.h>
#include<math.h>
int main(){
char hex_str[100];
int len, i, dec_num = 0;
printf("请输入一个十六进制字符串:\n");
scanf("%s", hex_str);
len = strlen(hex_str);
for(i = 0; i < len; i++){
int digit;
if(hex_str[i] >= '0' && hex_str[i] <= '9'){
digit = hex_str[i] - '0';
}
else if(hex_str[i] >= 'a' && hex_str[i] <= 'f'){
digit = hex_str[i] - 'a' + 10;
}
else if(hex_str[i] >= 'A' && hex_str[i] <= 'F'){
digit = hex_str[i] - 'A' + 10;
}
dec_num += digit * pow(16, len-i-1);
}
printf("转换后的十进制数为:%d\n", -dec_num);
return 0;
}
```
该代码将用户输入的十六进制字符串转换为十进制数,并输出其负值。使用了循环和条件语句来解析字符串中的每个字符,并使用pow函数计算每个位的权值。最终计算出的十进制数取负值后输出。
阅读全文