首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将"unsigned char“数组转换为"unsigned short”数组的有效方法是什么?

将"unsigned char“数组转换为"unsigned short”数组的有效方法是什么?
EN

Stack Overflow用户
提问于 2011-06-13 16:32:32
回答 2查看 886关注 0票数 0

将"unsigned char“数组转换为"unsigned short”数组的有效方法是什么?我通常使用以下代码片段来完成此操作。

代码语言:javascript
复制
#define CH_LINE_PIXELS       2291
#define SCANLINE_SIZE        57301
#define CH1_INDEX            2297
#define CH2_INDEX            4592
#define CH3_INDEX            6887
#define CH4_INDEX            9182

unsigned char* pUChar = new unsigned char[SCANLINE_SIZE];

unsigned short *pUS1, *pUS2, *pUS3, *pUS4;
pUS1 = reinterpret_cast<unsigned short *>(&pUChar[CH1_INDEX]);
pUS2 = reinterpret_cast<unsigned short *>(&pUChar[CH2_INDEX]);
pUS3 = reinterpret_cast<unsigned short *>(&pUChar[CH3_INDEX]);
pUS4 = reinterpret_cast<unsigned short *>(&pUChar[CH4_INDEX]);

unsigned short us1, us2;

for (unsigned int i = 0; i < CH_LINE_PIXELS; i++) 
{   
    us1 = pUChar[CH1_INDEX + 2 * i];
    us2 = pUChar[CH1_INDEX + 2 * x + 1];
    pUS1[x] = us1 * 0x100 + us2;

    us1 = pUChar[CH2_INDEX + 2 * i];
    us2 = pUChar[CH2_INDEX + 2 * i + 1];
    pUS2[x] = us1 * 0x100 + us2;

    us1 = pUChar[CH3_INDEX + 2 * i];
    us2 = pUChar[CH3_INDEX + 2 * i + 1];
    pUS3[x] = us1 * 0x100 + us2;

    us1 = pUChar[CH4_INDEX + 2 * i];
    us2 = pUChar[CH4_INDEX + 2 * i + 1];
    pUS4[x] = us1 * 0x100 + us2;
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-06-13 16:49:52

在字节边界上寻址short可能会(也可能不会)导致对齐问题,具体取决于平台。

另外,乘法是非常无效的,为什么不使用移位呢?(一些编译器可能会优化x * 0x100,但如果他们不这样做-当您想要的只是x << 8时,这会对性能造成巨大的影响……)

此外,如前所述,reinterpret_cast可能不会像您期望的那样工作。

我建议,因为您无论如何都要进行赋值,所以应该将值从char的数组复制到short的单独数组中。它需要一些内存,但是会为你省去很多意外的崩溃和其他的麻烦。

票数 -1
EN

Stack Overflow用户

发布于 2011-06-13 16:50:16

嗯,首先你应该做的是:

us1 << 8 + us2,而不是乘以0x100,因为您希望将前8位移到较高位置,并且移位比乘法更快。

例如,你有us1 = aaaaaaaa (8位)和us2 = bbbbbbbb (另外8位)。将这些字符扩展为短字符只需在左侧填充8个零即可。

那么上面的公式将会给你:

代码语言:javascript
复制
00000000aaaaaaaa
<< 8
aaaaaaaa00000000
+ 00000000bbbbbbbb
aaaaaaaabbbbbbbb

另一方面,你应该为你的结果分配一个新的短波数组。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6328191

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档