首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何用c将10bit数据存储到8bit数组中?

如何用c将10bit数据存储到8bit数组中?
EN

Stack Overflow用户
提问于 2012-05-27 04:59:39
回答 1查看 716关注 0票数 0

我有一些这样的数据:

0表示数据

X表示空

0000000000xxxxxx

10位..........浪费了6位

我想用下一个数据来压缩它,以节省空间。

我使用位移位来做到这一点。

8Bit | 2Bit 6Bit | 4Bit 4Bit | 6Bit 2Bit | 8Bit

到目前为止,我有:

代码语言:javascript
运行
复制
#define mask1   (char)((Data & 0xFF00) >> 8);  //apply mask
#define mask2   (char)((Data & 0x00C0) >> 6);
#define mask3   (char)((Data & 0xFC00) >> 10); 
#define mask4   (char)((Data & 0x03C0) >> 6);
#define mask5   (char)((Data & 0xF000) >> 12); 
#define mask6   (char)((Data & 0x0FC0) >> 6);
#define mask7   (char)((Data & 0xC000) >> 14); 
#define mask8   (char)((Data & 0x3FC0) >> 6);

switch (counter) {     //repeat after 4 times
    case 0:
         array[i++] = mask1;
         array[i]   = mask2;
         counter++;
         break; 

    case 1:
         array[i++]| = (mask3);
         array[i]    = (mask4);
         counter++;
         break;

    case 2:
         array[i++]| = mask5;
         array[i]    = mask6;
         counter++;
         break; 

    case 3:
         array[i++]| = mask7;
         array[i++]  = mask8;
         counter=0;
         break;
}
EN

回答 1

Stack Overflow用户

发布于 2020-08-04 04:42:23

一个可行的方法是强制转换数组,并移动数组指针。如果我用图表来说明这一点会更好:

代码语言:javascript
运行
复制
oooooooooo_____
        __oooooooooo____
                ____oooooooooo__
                        ______oooooooooo
                             >>>|<<<
                                        oooooooooo______

因此,如果我们要实现上面的想法,我们会得到如下所示的代码:

代码语言:javascript
运行
复制
void convert(char* array, int arraySz, tenbitData* Data, int dataSz)
{
    char* arrPtr = array;
    int dataIdx = 0;
    int rollCnt = 0;

    for (int i = 0; i < dataSz; i++)
    {
        ushort dat = dataSz[i] << 6 - ((i % 4) * 2);
        ushort* ariPtr = (ushort*) arrPtr;
        ariPtr[0] |= dat;
        arrPtr += ((i % 4) == 3 ? 2 : 1;
    }
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10769727

复制
相关文章

相似问题

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