c++ 如何将unsigned short 数组转换成 int 类型?

比如: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个字节啊。为什么读取的 i 和 j 值 不一样?

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

温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-08-21
最好不要转,因为short是2个字节,int是4个字节,你转换以后,你的每2个short会被当做1个int,所以如果非要转,可以强制转换。
int *pp=(int *)p;就可以了,
但是一定要记住,这时候,pp就变成50个元素了,如果你数组越界有可能会出错。追问

现在p指向unsigned short 类型的100个数,但是另外一个程序有个int变量要用到这100个数,所以我想把p指向的100个数,转换成int类型。

追答

如果只是数的转换的话,是可以直接转的,我也建议你直接使用数据的转换,不要轻易用指针的转换。
比如int a;想用你的short数据,可以直接赋值
a=p[0];或者a=p[i];就可以了,不用特别的转换,因为这个从低向高处转换使自动的,因为short的16位撑死也不可能占满int的32位空间。

本回答被提问者和网友采纳
第2个回答  2012-08-21
unsigned short *p;
int t[100];
p=new unsigned short [100];
for(i=0;i<100;i++)t[i]=p[i];追问

我分别用 file.Read(&i,sizeof(int)); 和 file.Read(&j,sizeof(float)); 做实验,发现i 和 j 的值不一样,为什么,int 和 float 都是4个字节啊。为什么读取的 i 和 j 值 不一样?

追答

int,float都占4个字节,但它们的表示方法是不一样的.

第3个回答  2012-08-21
使用sprintf试试
相似回答