char *怎样转成int

例如:char*data="3210";转化后的int值是0x1032的十进制值。求指导... 例如:char * data = "3210";
转化后的int值 是0x1032的十进制值。求指导
展开
 我来答
大宝妈谈教育
高粉答主

2020-05-06 · 关注我不会让你失望
知道小有建树答主
回答量:3306
采纳率:100%
帮助的人:54.7万
展开全部

char*怎样无法转成int,int可以转成char*。

1.首先,在python命令窗口中键入int(12,2)。结果是一个错误。

2.改为24589。

3.将int()方法中的第一个参数字符串的数量更改为0和1。

4.如果希望将字符串转换为八进制数,请使用int()方法并传递第二个参数8。

5.将字符串值转换为decimal,将第二个参数传递给2,并返回相同的结果。

6.如果希望将字符串中的值转换为十六进制,并且字符串中的值不能超过常值。

风若远去何人留
推荐于2017-09-28 · 知道合伙人互联网行家
风若远去何人留
知道合伙人互联网行家
采纳数:20412 获赞数:450132
专业C/C++软件开发

向TA提问 私信TA
展开全部
char *转int
也就是字符串转换为整数,这个是一个挺常用的功能了
对于十进制数,直接用atoi或者linux下支持的stringtoul一类的就可以
比如你说的"3210"用这类函数,就可以直接转成10进制的3210

不过,按照你说的3210转换成16进制的0x1032这个就不能算是常规转换了,转成同值16进制不说,高低位也反过来了
这个就比较麻烦,需要自己写转换函数

具体的方法,需要看你的转换规则
基本思路都是一样的
逐位读取字符串中的字符,并转换成对应16进制字符,比如'3'->0x3 'A'-> 0xa 'a'->0xa
等等
得到这些字符后,按照你需要的顺序,重排。 用移位(>> <<)加位或(|)操作可以做到
由于无法判断具体的转换规则 没办法给出通用的代码

对于"3210"->0x1032可以给一个参考例子

char *data = "3210";
int result = 0;
int j;
char buffer[5];
strcpy(buffer, data);//data是常量字符串,无法改变值,放到buffer里操作
for(j = 0; j <4; j ++)
{
if(buffer[j] <= '9' && buffer[j] >= '0')
buffer[j] -= '0';
else if(buffer[j] <= 'F' && buffer[j] >= 'A')
buffer[j] -= 'A'-0xa;
else if(buffer[j] <= 'f' && buffer[j] >= 'a')
buffer[j] -= 'a'-0xa;
else printf("unknow char %c\n", buffer[j]);
}
result = (buffer[2]<<12)|(buffer[3]<<8)|(buffer[0]<<4)|buffer[1];
printf("result is 0x%4x\n", (unsigned)result);

供参考 望有帮助
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
不懂多来问问
2013-08-29 · TA获得超过2591个赞
知道小有建树答主
回答量:474
采纳率:0%
帮助的人:428万
展开全部
你是强制转换吗?
0x1032是16进制啊,10进制的数据总么会有0x呢?
如果你是进行的强制转换,那结果一定是错的,因为字符和整数进行转换都是按ASCII编码进行转换的。ASCII中只有单个字符的编码,字符串要被转换为整型都需要单个单个的进行转换。
但很多时候,我们要将一个数字型的字符串转换为相对应的整型数据,这要总么转呢。强制转换一定是不行的,因为强制转换按内存模型来匹配的,只是将一个数据的内存套到要转换的数据内存中。
这时候我们就要用相应的算法来处理,至于这个算法有很多,由于本人水平有限,还是不给你现丑了,这里我告诉你几个库函数,这些库函数在stdlib.h头文件中
1. float atof(const char *str);:字符串转浮点型函数,即将一个"123.12"转换为float类型的123.12
2. int atoi(const char *str); 字符串转整型函数
3. long atol(const char *str); 字符串转长整型函数

这里给你一个示例吧:

#include <stdio.h>
#include <stdlib.h>
int main(void)
{
char *str="12345.67";
long result;
result=atol(str);
printf("string=%s\nlong =%ld\n",str,result);
getch();
return 0;
}
//这个示例是将一个char *str="12345.67";类型的数据转换为对应的浮点类型数据
追问
那个0x1032中的0x我只是说明是十六进制,是不是没有这样转换的函数?
追答

        10进制转为16进制有什么难的呢?网上有大量进制转换函数代码,随便找一个加进去就可以了。如果只是要在输出时转换为16进制,库中有很多格式化输出函数,printf就可以进行格式转换输出。

        另外进制是可以进行隐式的转换的,看下图(是用C++的代码)

//由此可以见你只要将这个数以16进制赋给一个整型变量,系统可以自动转换为一个10进制的数。

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
XHHISEA02274
推荐于2017-09-21 · TA获得超过8万个赞
知道大有可为答主
回答量:1.4万
采纳率:81%
帮助的人:3616万
展开全部

主要使用atoi函数,具体如下:

为验证x确实是整型,还计算了1234567+1=1234568,具体如上!

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
ge2008ge12
2013-08-29 · TA获得超过1110个赞
知道小有建树答主
回答量:683
采纳率:100%
帮助的人:347万
展开全部
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
int main()
{

char * data = "3210";

int int_data[4];
int hex_data;
int length;

char *c;
c = data;
int i;

length = strlen(data);

if(length!=4)
{
printf("the string must be four\n");
exit(0);

}

for(i = 0;i < length;i++)
{
int_data[i] = int(*c -'0');
c++;

printf("%d\n",int_data[i]);
}

hex_data = int_data[2] *pow(16.0,3) + int_data[3]*pow(16.0,2) + int_data[0] *pow(16.0,1)+ int_data[1];

printf("0x%x ====%d(10)\n",hex_data,hex_data);

return 0;
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(5)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式