读书人

char转int失败!解决方法

发布时间: 2012-12-15 15:16:03 作者: rapoo

char转int失败!!
各位,我想把一个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 有关?
[最优解释]

引用:
是这样的,这个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输出就可以了
[其他解释]
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的格式而已。

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

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

然后我 t1 = atoi(c2); 结果t1 的值为0……

[其他解释]
unsigned char转int

将unsigned char按int格式输出
不是一回事!

unsigned char转int:
int i;
unsigned char c;
i=(int)c;

将unsigned char按int格式输出:
printf("%d\n",c);


[其他解释]
如果你的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;
}

[其他解释]

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;
}


运行结果

[其他解释]
没看懂你要怎么转.....
'0-9'转0-9?
'a-f'转10-15?

[其他解释]
你想怎么转?没看明白.你把code贴上来.
[其他解释]
功 能: 把字符串转换成整型数.


  名字来源:array to integer 的缩写.


  原型: int atoi(const char *nptr);


  函数说明: 参数nptr字符串,如果第一个非空格字符不存在或者不是数字也不是正负号则返回零,否则开始做类型转换,之后检测到非数字或结束符 \0 时停止转换,返回整型数。


  头文件: #include <stdlib.h>

[其他解释]
引用:
各位,我想把一个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 相连参量应是一个指针,其中存放已写字符的个数
希望对你有帮助!
另外不要忘了结贴!兄弟!

[其他解释]
是这样的,这个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.
第一楼就是我的代码,只不过都是做实验失败的代码。。。。。
[其他解释]
char *ch;

int num=atoi(ch);
[其他解释]

 原型: int atoi(const char *nptr);
[其他解释]
引用:
是这样的,这个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);
[其他解释]
已验证,直接用 “=”赋值就可以了。
唉,惭愧,多谢各位兄弟援手!!
[其他解释]
一个unsigned char能表示的最大值为255

[其他解释]
引用:
unsigned char转int

将unsigned char按int格式输出
不是一回事!

unsigned char转int:
int i;
unsigned char c;
i=(int)c;

将unsigned char按int格式输出:
printf("%d\n",c);

今天刚好遇到了相关问题,受教受教了,谢谢

读书人网 >C语言

热点推荐