求C语言将十六进制字符串转换为整型int的函数源代码,要求不能用库函数?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了求C语言将十六进制字符串转换为整型int的函数源代码,要求不能用库函数?相关的知识,希望对你有一定的参考价值。
例如将char pcNumber[100] = "0xA12";转换为int型的数字2578。
/*请输入十六进制数 : 120
十 六 进 制 数: 120
十 进 制 数: 288
Press any key to continue
*/
#include <ctype.h>
#include <stdio.h>
#define MAX 10
#define NewLine 10
main ()
char num16[MAX];
unsigned long cocnvertfactor = 1,num10 = 0;
char ch,j,i = 0;
printf("请输入十六进制数 : ");
while (((ch = getchar()) != NewLine) && (i < MAX))
if ((ch >= '0' && ch <= '9') || (ch >= 'A' && ch <= 'F') || (ch >= 'a' && ch <= 'f'))
num16[i++] = ch; // 仅接收数字和英文前6个字母
for (j = 0;j < i;j++) num16[j] = toupper(num16[j]); // 小写字母转换成大写,其他字符不变
for (j = i - 1;j >= 0;j--) // 开始转换
if (isalpha(num16[j])) num10 = num10 + cocnvertfactor*(num16[j] - 'A' + 10);
else num10 = num10 + cocnvertfactor*(num16[j] - '0');
cocnvertfactor = 16*cocnvertfactor;
printf("\n十 六 进 制 数: ");
for (j = 0;j < i;j++) printf("%c",num16[j]);
printf("\n十 进 制 数: %u\n\n\n",num10);
参考技术A #include <stdio.h>
int main(void)
int n=0,i;
char s[100]="A12";
for(i=0;s[i];i++)
if(s[i]>='A'&&s[i]<='Z')n=n*16+s[i]-'A'+10;
else n=n*16+s[i]-'0';
printf("%d\n",n);
return 0;
参考技术B 自己做吧。给你点提示:
需要用到strlen函数,可以返回你得到的字符串长度,然后从pcNumber[2]开始,得到16进制数。
原型:extern unsigned int strlen(char *s);
用法:#include <string.h>
功能:计算字符串s的(unsigned int型)长度
说明:返回s的长度,不包括结束符NULL。
long int l_DEC = 0;
int i_Len = 0;
if (pcNumber[0] == "0" && (pcNumber[1] == "X" || pcNumber[1] == "x"))
i_Len = strlen(pcNumber);
for (int i = 2; i < i_Len; i++)
switch (pcNumber[i])
case "1":
l_DEC += 1 + pow(16, i_Len - i -1);
break;
……
case "F"
l_DEC += 15 + pow(16, i_Len - i -1);
break;
default:
l_DEC += 0;
break;
算法和思路都在上面了,希望能够给你足够的启发。
c语言中如何将一个字符ascii码转换为整型数
#include"stdio.h"
#include"string.h"
main()
int i,s;
int num[80];
char str[80],ch[80];
i=0;
s=0;
printf("input a string:");
gets(str);
while(str[i]!='\n')
i++;
str[i]='\0';
for(i=0;i<80;i++)
if(str[i]>='0'&&str[i]<='9')
ch[i]=str[i]-'0';
num[i]=ch[i];
s=s*10+num[i];
printf("%d",s);
printf("\n");
getch();
ASCII码,英文全称:American Standard Code for Information Interchange,是美国信息交换标准代码是一种用于信息交换的美国标准代码。7位字符集广泛用于代表标准美国键盘上的字符或符号。通过将这些字符使用的值标准化,ASCII允许计算机和计算机程序交换信息。ASCII字符集是与ANSI字符集中的前面128个(0-127)字符相同。
美国信息交换标准代码ASCII为"美国信息交换标准代码"十个字对应英文的缩写,ASCII文件是简单的无格式文本文件,可以由任何计算机所识别,Windows中的记事本及任何文字处理程序都可以阅读及创建ASCII文件。ASCII文件通常都具有扩展名.TXT(例如README.TXT)
在计算机中,所有的数据在存储和运算时都要使用二进制数表示,同样的,象a、b、c、d这样的52个字母(包括大写)、以及0、1、2等数字还有一些常用的符号(例如*、#、@等)在计算机中存储时也要使用二进制数来表示,而具体用哪个数字表示哪个符号,当然每个人都可以约定自己的一套(这就叫编码),而大家如果要想互相通讯而不造成混乱,那么大家就必须使用相同的编码规则,于是美国有关的标准化组织就出台了所谓的美国信息交换标准码,统一规定了上述常用符号用哪个二进制数来表示。 参考技术A 删掉ch[i]这个步骤就可以了
ch[i]=str[i]-'0';
num[i]=ch[i];
s=s*10+num[i];
改成
num[i]=str[i]-'0';
s=s*10+num[i]; 参考技术B str[i]-'0'这不就转了吗,直接减去'0'(字符)追问
可是运行结果有错啊?
追答你那是赋值错误,你把整数赋值给了ch[i],你直接打印出来str[i]-'0'看看
参考技术C while(str[i]!='\n')这里改成 while(str[i]!='\0') 参考技术D for循环的错误,不能让他加到80.i<strlen(str);并且gets的用法也有错误,它会直接加‘\0’,不用自己加吧
你的程序写的有点繁琐
#include"stdio.h"
#include"string.h"
main()
int i,s;
char str[80];
i=0;
s=0;
printf("input a string:");
gets(str);
for(i=0;i<strlen(str);i++)
if(str[i]>='0'&&str[i]<='9')
s=s*10+str[i]-'0';
printf("%d",s);
printf("\n");
getchar();
本回答被提问者采纳
以上是关于求C语言将十六进制字符串转换为整型int的函数源代码,要求不能用库函数?的主要内容,如果未能解决你的问题,请参考以下文章