有一批固定数量的数据,每个数据占用14bit,在代码中存储时使用unsigned short
,现在需要将16bit的数据转换为14bit,如下示例:
编程实现将16bit数据转换为14bit,输入为unsigned short
类型,输出为unsigned char
类型,下面的代码比较粗暴,想请教网友有没有更简单的方式。
unsigned short psrc[] = {0x3245, 0x0657, 0x2671, 0x1546};
unsigned char pdst[7];
unsigned char src[8] = {0};
int index = 0;
for(int i=0;i<sizeof(psrc)/sizeof(psrc[0]); ++i){
src[index++] = (psrc[i] & 0xff);
src[index++] = ((psrc[i] >> 8 )& 0xff);
}
index=0;
for(int i=0;i<8;i+=8){
pdst[index++] = src[i];
pdst[index++] = (src[i+1] & 0x3f) | (src[i+2] << 6);
pdst[index++] = (src[i+2]&0xfc) >> 2 | (src[i+3] << 6);
pdst[index++] = ((src[i+3]&0x3c) >> 2) | (src[i+4] << 4);
pdst[index++] = (src[i+4] >> 4) | (src[i+5] << 4);
pdst[index++] = (src[i+5] >> 4) | (src[i+6] << 2);
pdst[index++] = (src[i+6] >> 6) | (src[i+7] << 2);
}