Objective c SInt32和<&书信电报;
我有一段简单的代码:Objective c SInt32和<&书信电报;,objective-c,int,shift,Objective C,Int,Shift,我有一段简单的代码: char data[4] = { 0x13, 0x34, 0xad, 0xff }; int s = 0; SInt32 tmp = data[s++]<<24; printf("tmp= %x\n",tmp); tmp += (data[s++]<<16); printf("tmp= %x\n",tmp); tmp += (data[s++]<<8); printf("tmp= %x\n",tmp); tmp += (data[s++
char data[4] = { 0x13, 0x34, 0xad, 0xff };
int s = 0;
SInt32 tmp = data[s++]<<24;
printf("tmp= %x\n",tmp);
tmp += (data[s++]<<16);
printf("tmp= %x\n",tmp);
tmp += (data[s++]<<8);
printf("tmp= %x\n",tmp);
tmp += (data[s++]);
printf("tmp= %x\n",tmp);
相反,我得到了
tmp= 13000000
tmp= 13340000
tmp= 1333ad00
tmp= 1333acff
有人能解释一下原因吗?至少在一些运行Objective-C的平台上,CHAR是签名的。默认情况下,它们可能是在objective-C中签名的 这意味着0xad和0xff为负,因为它们具有负符号位(MSB) 因此,不是在倒数第二行中添加255,而是实际添加-1。前面的加法同样涉及负数
如果您将数据更改为“unsigned char”,这种行为应该会消失——尽管第一次转换可能会很有趣。是的,经过短暂的调试,我找到了相同的解决方案。:)
tmp= 13000000
tmp= 13340000
tmp= 1333ad00
tmp= 1333acff