打印
[牛人杂谈]

字符存储的数字与int之间互转

[复制链接]
507|8
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
heisexingqisi|  楼主 | 2019-12-4 19:41 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#include <stdio.h>
#include <stdlib.h>

int main()
{
    int i=0;
    char str[16]={0};

while(1)
   {

   printf("请输入一个10进制整数:");
   scanf("%d",&i);
   itoa(i,str,10);
   printf("这个10进制整数是:%s\n",str);
   itoa(i,str,16);
   printf("这个16进制整数是:%s\n",str);
   printf("----------------------------\n");
   printf("请输入一个16进制整数:");
   scanf("%x",&i);
   itoa(i,str,16);
   printf("这个16进制整数是:%s\n",str);
   printf("这个数的十进制是:%d\n",i);

   }

}


使用特权

评论回复
沙发
heisexingqisi|  楼主 | 2019-12-4 19:42 | 只看该作者
使用库函数确实很方便。但是这只能转字符串的10进制。转16进制的字符串到int还需要自己实现。

使用特权

评论回复
板凳
zhuotuzi| | 2019-12-4 21:15 | 只看该作者
非常给力,大家一起研究一下一个字符串怎么按16进制转换。

使用特权

评论回复
地板
zhuotuzi| | 2019-12-4 23:40 | 只看该作者
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int Hex2Dec(char tem)
{
      if((tem=='A')&&(tem=='a')) return 10;
else if((tem=='B')&&(tem=='b')) return 11;
else if((tem=='C')&&(tem=='c')) return 12;
else if((tem=='D')&&(tem=='d')) return 13;
else if((tem=='E')&&(tem=='e')) return 14;
else if((tem=='F')&&(tem=='f')) return 15;
else if((tem>='0')&&(tem<='9')) return tem-'0';
}
int AsciiHexToInt(char *p)
{
    int val=0;
    char tt;
    unsigned char i = strlen(p);
    printf("\n字符串长度=%d\n",i);
   while(i>0)
    {
        tt=*p++;
        val += (Hex2Dec(tt)*pow(16,(i-1)));
        i--;
    }
//   val +=Hex2Dec(*(p++))*16^((i--)-1);
    return val;
}


int main()
{
    int i=0;
    char str[16]={0};
    char id[40];

while(1)
   {
/*
   printf("请输入一个10进制整数:");
   scanf("%d",&i);
   itoa(i,str,10);
   printf("这个10进制整数是:%s\n",str);
   itoa(i,str,16);
   printf("这个16进制整数是:%s\n",str);
   printf("----------------------------\n");
   printf("请输入一个16进制整数:");
   scanf("%x",&i);
   itoa(i,str,16);
   printf("这个16进制整数是:%s\n",str);
   printf("这个数的十进制是:%d\n",i);
   */
   printf("----------------------------\n");
   printf("请输入一个16进制整数:");
   scanf("%s",&id);
   printf("\n输入的字符串是%s\n",id);
   i=AsciiHexToInt(id);
   printf("i=%d\n",i);

   }

}

使用特权

评论回复
5
zhuotuzi| | 2019-12-4 23:41 | 只看该作者
经过了俩小时不懈努力,帮楼主实现了。
其实还可以这样,先判断是不是有0x开头,如果有,那么就把后面的作为16进制读取,如果存储的话,一般也不用写0x。有空谁在增加的识别开头字符串是不是带0x或0X.

使用特权

评论回复
6
zhuotuzi| | 2019-12-4 23:46 | 只看该作者
本帖最后由 zhuotuzi 于 2019-12-4 23:49 编辑
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int Hex2Dec(char tem)
{
      if((tem=='A')||(tem=='a')) return 10;
else if((tem=='B')||(tem=='b')) return 11;
else if((tem=='C')||(tem=='c')) return 12;
else if((tem=='D')||(tem=='d')) return 13;
else if((tem=='E')||(tem=='e')) return 14;
else if((tem=='F')||(tem=='f')) return 15;
else if((tem>='0')&&(tem<='9')) return tem-'0';
}
int AsciiHexToInt(char *p)
{
    int val=0;
    char tt;
    unsigned char i = strlen(p);
    printf("\n字符串长度=%d\n",i);
   while(i>0)
    {
        tt=*p++;
        val += (Hex2Dec(tt)*pow(16,(i-1)));
        i--;
    }
//   val +=Hex2Dec(*(p++))*16^((i--)-1);
    return val;
}


int main()
{
    int i=0;
    char str[16]={0};
    char id[40];

while(1)
   {
/*
   printf("请输入一个10进制整数:");
   scanf("%d",&i);
   itoa(i,str,10);
   printf("这个10进制整数是:%s\n",str);
   itoa(i,str,16);
   printf("这个16进制整数是:%s\n",str);
   printf("----------------------------\n");
   printf("请输入一个16进制整数:");
   scanf("%x",&i);
   itoa(i,str,16);
   printf("这个16进制整数是:%s\n",str);
   printf("这个数的十进制是:%d\n",i);
   */
   printf("----------------------------\n");
   printf("请输入一个16进制整数:");
   scanf("%s",&id);
   printf("\n输入的字符串是%s\n",id);
   i=AsciiHexToInt(id);
   printf("i=%d\n",i);

   }

}

使用特权

评论回复
7
zhuotuzi| | 2019-12-4 23:47 | 只看该作者
不好意思,第一次发的,逻辑搞错了,或应该是||
我写成了&&与,所以不对。。。

使用特权

评论回复
8
zhuotuzi| | 2019-12-4 23:47 | 只看该作者
另外应该添加个报错的,如果输入的字符串里面不是0~9或者A到F,或者a~f,那么应该输出一个错误消息。添加上。

使用特权

评论回复
9
玛尼玛尼哄| | 2019-12-14 21:16 | 只看该作者
方法不错。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

131

主题

2615

帖子

2

粉丝