C语言中的unsigned char数组怎么转成unsigned short数组

constunsignedchargImage_23[153600]={0X32,0X72.......}constunsignedshortgImage_23[]={0... const unsigned char gImage_23[153600] = { 0X32,0X72.......}
const unsigned short gImage_23[]={ 0x3681,0x2AF0......}
请问怎么从CHAR转成SHORT呀?是不是只要把CHAR中的两位合起来就可以了?如上面的 改成0X3272就可以了?
这是BMP转成C代码的数组。
展开
 我来答
L_o_o_n_i_e
2009-03-23 · TA获得超过4.2万个赞
知道大有可为答主
回答量:8507
采纳率:38%
帮助的人:5220万
展开全部
是的改成0X3272就可以了
用左移和 按位加:
( 0x32 << 16) | 0x72
----------------------------

如果涉及 big_endian 和 little_endian 变化,则互换两个字节即可
戊佑平湛俏
2019-04-15 · TA获得超过3.8万个赞
知道大有可为答主
回答量:1.4万
采纳率:32%
帮助的人:915万
展开全部
发生了截断,因为unsigned
char类型只有1字节,只能保存0~255的数据,而unsigned
short
有2字节。
所以这样转换之后,unsigned
short
高2位的数据就丢失了,低2位数据被保存了。(高低位是以16进制来看的)
高低位提取:
unsigned
short
a
=
0xfeba;
int
b
=
a
&
0xff00;
/*
高2位=0xfe00
*/
int
c
=
a
&
0x00ff;
/*
低2位=0x00ba
*/
问题补充:
我用的是vb6,vb2005的ushort忘记考虑了,呵呵。
这样吧,用乘除来达到提取的目的。
检查了一下,应该这样写
高2位:变量
\
(2^8)
低2位:变量
mod
(2^8)
一字节有8个bit,所以可以表示2^8个数,就是256,用16进制表示就是0xff,刚好是2位的宽度。
假设变量是0xabcd,整除2^8,得到0xab,高2位;余除2^8,得到0xcd,低2位
不知道这样回答对不对?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
tattackor
推荐于2016-09-10 · TA获得超过3.5万个赞
知道大有可为答主
回答量:5083
采纳率:94%
帮助的人:889万
展开全部

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);
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友0c1f95dde2
2019-01-12 · TA获得超过3.6万个赞
知道大有可为答主
回答量:1.4万
采纳率:32%
帮助的人:962万
展开全部
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,那么下面就不需要强制zd转换了
for (i=0; i <4; i++)
result += (unsigned short)a[i] << ((3-i)*8);//每次都移位,数据转换为无符号
printf("%d\n", result);
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
隋远赏衣
2019-03-23 · TA获得超过3.6万个赞
知道小有建树答主
回答量:1.4万
采纳率:28%
帮助的人:711万
展开全部
是的改成0X3272就可以了
用左移来和
按位加:
(
0x32
<<
16)
|
0x72
----------------------------
如果涉自及
big_endian

little_endian
变化,则互换zhidao两个字节即可
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(4)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式