从大字节序到小字节序提取数据

时间:2020-02-03 01:15:35

标签: c++ endianness

假设我有一个函数应该能够从任何其他整数类型中提取任何整数类型(charintlong等),因为某些数据输出设备喜欢将小数据打包成更大的数据类型(即chars中的4 uint32_t)。我写了一个函数

  1. 获取数据数组
  2. 引用向量
  3. 吃醉表示苦味

此功能片段是否有意义?想得越多,我就会失去信心

if(data_type_size == SIZE_OF_UINT32){
    uint32_t d = 0;
    if(vector_type_size == SIZE_OF_CHAR){
        for(size_t i = 0; i < length; i++){
            d = data[i];
            if(big_endian){
                v.push_back((d & 0xFF000000) >> 24);
                v.push_back((d & 0x00FF0000) >> 16);
                v.push_back((d & 0x0000FF00) >> 8);
                v.push_back((d & 0x000000FF));
            }
            // little endian
            else {
                v.push_back((d & 0x000000FF));
                v.push_back((d & 0x0000FF00) >> 8);
                v.push_back((d & 0x00FF0000) >> 16);
                v.push_back((d & 0xFF000000) >> 24);
            }
        }
    }
}

给出一个uint32_t数组

data[0] = 0x0A0B0C0D;
data[1] = 0x0E0F1011;

上面的代码输出

0xa,0xb,0xc,0xd,0xe,0xf,0x10,0x11
0xd,0xc,0xb,0xa,0x11,0x10,0xf,0xe

这是我的期望。我想我开始变得偏执的地方在想...... 4F实际上F4有点小病吗?但是我不这么认为,因为这是字节的东西,而不是蚕食(?)的东西。

0 个答案:

没有答案