加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

C/C++代码将字符数组视为比特流

发布时间:2020-12-16 04:52:48 所属栏目:百科 来源:网络整理
导读:我在char []数组中有一大块二进制数据,我需要将其解释为打包的6位值数组. 我可以坐下来写一些代码来做这件事,但我认为必须有一个好的现存的类或函数已经有人写过. 我需要的是: int get_bits(char* data,unsigned bitOffset,unsigned numBits); 所以我可以通
我在char []数组中有一大块二进制数据,我需要将其解释为打包的6位值数组.

我可以坐下来写一些代码来做这件事,但我认为必须有一个好的现存的类或函数已经有人写过.

我需要的是:

int get_bits(char* data,unsigned bitOffset,unsigned numBits);

所以我可以通过调用以获取数据中的第7个6位字符:

const unsigned BITSIZE = 6;
char ch = static_cast<char>(get_bits(data,7 * BITSIZE,BITSIZE));

解决方法

这可能不适用于大于8的大小,具体取决于endian系统.这基本上就是Marco所发布的,尽管我不完全确定为什么他会一次收集一下.
int get_bits(char* data,unsigned int bitOffset,unsigned int numBits) {
    numBits = pow(2,numBits) - 1; //this will only work up to 32 bits,of course
    data += bitOffset/8;
    bitOffset %= 8;
    return (*((int*)data) >> bitOffset) & numBits;  //little endian
    //return (flip(data[0]) >> bitOffset) & numBits; //big endian
}

//flips from big to little or vice versa
int flip(int x) {
    char temp,*t = (char*)&x;
    temp = t[0];
    t[0] = t[3];
    t[3] = temp;
    temp = t[1];
    t[1] = t[2];
    t[2] = temp;
    return x;
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读