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代码的数组。 展开
const unsigned short gImage_23[]={ 0x3681,0x2AF0......}
请问怎么从CHAR转成SHORT呀?是不是只要把CHAR中的两位合起来就可以了?如上面的 改成0X3272就可以了?
这是BMP转成C代码的数组。 展开
6个回答
展开全部
发生了截断,因为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位
不知道这样回答对不对?
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位
不知道这样回答对不对?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
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、移位相加即可,但是要注意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);
}
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);
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
是的改成0X3272就可以了
用左移来和
按位加:
(
0x32
<<
16)
|
0x72
----------------------------
如果涉自及
big_endian
和
little_endian
变化,则互换zhidao两个字节即可
用左移来和
按位加:
(
0x32
<<
16)
|
0x72
----------------------------
如果涉自及
big_endian
和
little_endian
变化,则互换zhidao两个字节即可
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询