为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

C++ C
慕后森 2022-05-12 15:11:36
比如: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个字节啊。
查看完整描述

3 回答

?
缥缈止盈

TA贡献2041条经验 获得超4个赞

1、移位相加即可,但是要注意unsigned short类型,需要转换为无符号数据,否则0xe8认为是负数(其实也可以定义时就为unsigned short)。

2、例程:


#include <stdio.h>int main(){  int i, result = 0;  unsigned short a[4] = {0x00,0x00,0x03,0xe8};//这里定义成unsigned char,那么下面就不需要强制转换了  for (i=0; i <4; i++)    result += (unsigned short)a[i] << ((3-i)*8);//每次都移位,数据转换为无符号  printf("%d\n", result);}


查看完整回答
反对 回复 2022-05-15
?
30秒到达战场

TA贡献1828条经验 获得超6个赞

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

查看完整回答
反对 回复 2022-05-15
?
RISEBY

TA贡献1856条经验 获得超5个赞

unsigned short *p;
int t[100];
p=new unsigned short [100];
for(i=0;i<100;i++)t[i]=p[i];

查看完整回答
反对 回复 2022-05-15
  • 3 回答
  • 0 关注
  • 119 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信