char转int失败!!

jiahehao 2012-11-23 11:06:03
各位,我想把一个unsigned char c1, 转换为一个int 型的 t1.
但用了好几种方法,都有问题。

比如:
printf("c1 is %x, c2 is %x. \n", c1, c2);
打印的值是,9F 和 17.

然后我 t1 = atoi(c2); 结果t1 的值为0.
t1 = atoi(&c2); 结果t1 的值为87546之类很大的一个数,象是内存地址.

又试过用 t1 = strtol(&c2, NULL, 16); 结果是 0.
其实我在vc6上做实验,用strtol 转换'f',能得到正确的值 15.

请教大神们,有啥办法得到char的值?难道和unsigned 有关?
...全文
226 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
WangBr 2012-11-24
  • 打赏
  • 举报
回复
引用 8 楼 zhao4zhong1 的回复:
unsigned char转int 和 将unsigned char按int格式输出 不是一回事! unsigned char转int: int i; unsigned char c; i=(int)c; 将unsigned char按int格式输出: printf("%d\n",c);
今天刚好遇到了相关问题,受教受教了,谢谢
jiahehao 2012-11-23
  • 打赏
  • 举报
回复
已验证,直接用 “=”赋值就可以了。 唉,惭愧,多谢各位兄弟援手!!
bluegem218 2012-11-23
  • 打赏
  • 举报
回复
引用 楼主 jiahehao 的回复:
各位,我想把一个unsigned char c1, 转换为一个int 型的 t1. 但用了好几种方法,都有问题。 比如: printf("c1 is %x, c2 is %x. \n", c1, c2); 打印的值是,9F 和 17. 然后我 t1 = atoi(c2); 结果t1 的值为0……
//******************************// printf(" %d", c1); “%”之后的格式解释:   d 有符号10进制整数   i 有符号10进制整数   o 无符号8进制整数   u 无符号10进制整数   x 无符号的16进制数字,并以小写abcdef表示   X 无符号的16进制数字,并以大写ABCDEF表示   f 浮点数   E/e 用科学表示格式的浮点数   g 使用%f和%e表示中的总的位数表示最短的来表示浮点数 G 同g格式,但表示为指数   c 单个字符   s 字符串   S wchar_t字符(宽字符)类型字符串   % 显示百分号本身   p 显示一个指针,near指针表示为:XXXX   far 指针表示为:XXXX:YYYY   n 相连参量应是一个指针,其中存放已写字符的个数 希望对你有帮助! 另外不要忘了结贴!兄弟!
bluegem218 2012-11-23
  • 打赏
  • 举报
回复
引用 3 楼 jiahehao 的回复:
是这样的,这个c1里读出的数,最大为 256。。。。,当然,一个char能表示的最大也就是256. 但是,我打印的时候会是这样: printf("c1 is %x, c2 is %x. \n", c1, c2); printf("c1 is %c, c2 is %c. \n", c1, c2); 结果为: ……
printf("c1 is %d, c2 is %d. \n", c1, c2);
bluegem218 2012-11-23
  • 打赏
  • 举报
回复
 原型: int atoi(const char *nptr);
转角天边 2012-11-23
  • 打赏
  • 举报
回复

int _tmain(int argc, _TCHAR* argv[])
{
unsigned char c1=159;
unsigned char c2=17;
printf("c1 is %x, c2 is %x. \n", c1, c2);
printf("c1 is %d, c2 is %d. \n", c1, c2+7);

system("pause");
return 0;
}

运行结果
  • 打赏
  • 举报
回复
如果你的char里面是数值

#include <stdio.h>
int main()
{
	char c1=16;
	int t1=c1;

	printf("c1=%x, t1=%x\n", c1, t1);
	printf("c1=%d, t1=%d\n", c1, t1);
	return 0;
}
如果你的char里面是字符型的数字

#include <stdio.h>
int main()
{
	char c1='9';		//只能存一位,想存9以是的,就得用16进制表示
	char pc1[2];
	int t1;

	pc1[0]=c1;
	pc1[1]=0;
	sscanf(pc1, "%d", &t1);


	printf("c1=%x, t1=%x\n", c1, t1);
	printf("c1=%d, t1=%d\n", c1, t1);
	printf("c1=%c, t1=%c\n", c1, t1);
	return 0;
}
赵4老师 2012-11-23
  • 打赏
  • 举报
回复
unsigned char转int 和 将unsigned char按int格式输出 不是一回事! unsigned char转int: int i; unsigned char c; i=(int)c; 将unsigned char按int格式输出: printf("%d\n",c);
图灵狗 2012-11-23
  • 打赏
  • 举报
回复
1、atoi/strtol等函数都是把字符串转为整型的; 2、字符串是char*/char[]这样声明的; 3、而你的unsigned char c1本身就是0~255的整型数,而不是字符串; 4、所以直接打印即可,printf("c1 is %d, c2 is %d. \n", c1, c2)。 %d/%x只是你打印c1和c2的格式而已。
引用 楼主 jiahehao 的回复:
各位,我想把一个unsigned char c1, 转换为一个int 型的 t1. 但用了好几种方法,都有问题。 比如: printf("c1 is %x, c2 is %x. \n", c1, c2); 打印的值是,9F 和 17. 然后我 t1 = atoi(c2); 结果t1 的值为0……
nice_cxf 2012-11-23
  • 打赏
  • 举报
回复
引用 3 楼 jiahehao 的回复:
是这样的,这个c1里读出的数,最大为 256。。。。,当然,一个char能表示的最大也就是256. 但是,我打印的时候会是这样: printf("c1 is %x, c2 is %x. \n", c1, c2); printf("c1 is %c, c2 is %c. \n", c1, c2); 结果为: ……
这个直接=就可以了 int c2=c1,打印时按照%d输出就可以了
hondely 2012-11-23
  • 打赏
  • 举报
回复
  功 能: 把字符串转换成整型数.   名字来源:array to integer 的缩写.   原型: int atoi(const char *nptr);   函数说明: 参数nptr字符串,如果第一个非空格字符不存在或者不是数字也不是正负号则返回零,否则开始做类型转换,之后检测到非数字或结束符 \0 时停止转换,返回整型数。   头文件: #include <stdlib.h>
hondely 2012-11-23
  • 打赏
  • 举报
回复
char *ch; int num=atoi(ch);
jiahehao 2012-11-23
  • 打赏
  • 举报
回复
是这样的,这个c1里读出的数,最大为 256。。。。,当然,一个char能表示的最大也就是256. 但是,我打印的时候会是这样: printf("c1 is %x, c2 is %x. \n", c1, c2); printf("c1 is %c, c2 is %c. \n", c1, c2); 结果为: c1 is 9f, c2 is 17. c1 is ? c2 is . 我只转第二个char,比如16进制打印为17,那我希望我能把它转成 16 + 7 = 23. 第一楼就是我的代码,只不过都是做实验失败的代码。。。。。
whizer 2012-11-23
  • 打赏
  • 举报
回复
你想怎么转?没看明白.你把code贴上来.
nice_cxf 2012-11-23
  • 打赏
  • 举报
回复
没看懂你要怎么转..... '0-9'转0-9? 'a-f'转10-15?
Primitive_forest 2012-11-23
  • 打赏
  • 举报
回复
一个unsigned char能表示的最大值为255

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧