你好,请问为什么读取的 i 和 j 值 不一样?

比如:unsigned short *p;
p=new unsigned short [100];

如何将p转换成int类型?
我分别用 file.Read(&i,sizeof(int)); 和 file.Read(&j,sizeof(float)); 做实验,发现i 和 j 的值不一样,为什么,int 和 float 都是4个字节啊。

慕后森
浏览 124回答 3
3回答

缥缈止盈

1、移位相加即可,但是要注意unsigned short类型,需要转换为无符号数据,否则0xe8认为是负数(其实也可以定义时就为unsigned short)。2、例程:#include&nbsp;<stdio.h>int&nbsp;main(){&nbsp;&nbsp;int&nbsp;i,&nbsp;result&nbsp;=&nbsp;0;&nbsp;&nbsp;unsigned&nbsp;short&nbsp;a[4]&nbsp;=&nbsp;{0x00,0x00,0x03,0xe8};//这里定义成unsigned&nbsp;char,那么下面就不需要强制转换了&nbsp;&nbsp;for&nbsp;(i=0;&nbsp;i&nbsp;<4;&nbsp;i++)&nbsp;&nbsp;&nbsp;&nbsp;result&nbsp;+=&nbsp;(unsigned&nbsp;short)a[i]&nbsp;<<&nbsp;((3-i)*8);//每次都移位,数据转换为无符号&nbsp;&nbsp;printf("%d\n",&nbsp;result);}

30秒到达战场

最好不要转,因为short是2个字节,int是4个字节,你转换以后,你的每2个short会被当做1个int,所以如果非要转,可以强制转换。int *pp=(int *)p;就可以了,但是一定要记住,这时候,pp就变成50个元素了,如果你数组越界有可能会出错。

RISEBY

unsigned short *p;int t[100];p=new unsigned short [100];for(i=0;i<100;i++)t[i]=p[i];
打开App,查看更多内容
随时随地看视频慕课网APP