char 转 int 的一个问题 char = -1 的问题

sk19891117 2014-10-27 12:14:02
给位大大,最近碰到一个问题如下
ios下
char a = -1;
int b = a;
这里的b = -1

在android下
char a = -1;
int b = a;
这里的b是255

请问各位这个问题怎么解决,我估计是因为 iso和android 中char或者int的位数不一样导致,但如何才能完美解决这个移植问题呢
谢过
...全文
538 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
li4c 2014-10-29
  • 打赏
  • 举报
回复
我昨天晚上读书看到了类似的问题,
int arry[] = {23, 34, 12, 17, 204, 99, 16};

#define TOTAL_ELEMENTS (sizeof(arry) / sizeof(arry[0]))

int main()
{
int d = -1;
/* ...   */


if(d < = TOTAL_ELEMENTS -2)
x = arry[d+1];

}
这里if表达式的值却不是真的,因为sizeof()的返回值是 unsigned int ,d的只是signed int,导致d 被转换成一个很大的正整数。楼主的和这个也差不多
mujiok2003 2014-10-28
  • 打赏
  • 举报
回复
引用 10 楼 mujiok2003 的回复:
char a = -1;
 int b = (signed char)a; // -1
int c = (unsigned char)a; //1
int c = (unsigned char)a; //255
mujiok2003 2014-10-28
  • 打赏
  • 举报
回复
char a = -1;
 int b = (signed char)a; // -1
int c = (unsigned char)a; //1
mymtom 2014-10-28
  • 打赏
  • 举报
回复
whether a ``plain'' char is treated as signed is implementation-defined.
dbzhang800 2014-10-27
  • 打赏
  • 举报
回复
要解决移植问题,你可以直接用 signed char 或 unsigned char 用char的话,可以赋值给int时,加个到signed char或 unsigned char 的类型转换。
江游之 2014-10-27
  • 打赏
  • 举报
回复
跟补码有关系,char里面的二进制换算成十进制是255, 你这种情况应该是在IOS里面转换的时候,在前面填充的都是1, 在android中应该填充的都是0.所以显示数字不同。
aa5566f4 2014-10-27
  • 打赏
  • 举报
回复
移植的時候是不是標頭檔要定義先
勤奋的小游侠 2014-10-27
  • 打赏
  • 举报
回复
应该是有一个char被当作unsigned char 了。 在ios下面用这个代码: ios下 unsigned char a = -1; int b = a; 这里的b = 255
707wk 2014-10-27
  • 打赏
  • 举报
回复
引用 3 楼 qq_22545711 的回复:
跟补码有关系,char里面的二进制换算成十进制是255, 你这种情况应该是在IOS里面转换的时候,在前面填充的都是1, 在android中应该填充的都是0.所以显示数字不同。
+1
Falleyes 2014-10-27
  • 打赏
  • 举报
回复
显式类型转换
罗博士 2014-10-27
  • 打赏
  • 举报
回复
直接指明是signed char还算unsigned char 另外,避免不同类型的初始化或赋值操作。
常书 2014-10-27
  • 打赏
  • 举报
回复
应尽量避免不同类型互相赋值,一般情况下: 如果 char b=-5; int a=(unsigned char)b; a的值为251 而int a=(signed char)b; a的值为-5; 如果以上办法行不通,那么可用如下方法

	int a = 0xff;
	char b = -5;
	
	if (b<0)
	{
		a=-1;
		a&=b;
	}
	else
	{
		a=0;
		a&=b;
	}

69,373

社区成员

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

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