1

我需要将 4 条数据复制到一个字节数组中,但需要将数据复制到特定的位位置。

这是一个例子。

我的4条数据如下。它们按照二进制文件中详述的从左到右的顺序排列,并用连字符分隔以提高可见性:

  • 1341 = 0x05D3(总是截断为 14 位)
  • 0001 = 0x0001(总是截断为 14 位)
  • 987654 = 0x0F1206(总是截断为 20 位)
  • 20110411 = 0x0132DC4B(总是截断为 25 位)

完成必要的输出:

0C 53 D0 00 7C 48 1A 65 B8 97

在二进制中,第一位和最后一位是奇偶校验:

1-00010100111101-000000000000001-11110001001000000110-1001100101101110001001011-1

我不知道如何做到这一点。有可能以某种方式使用位移吗?

4

2 回答 2

3

我建议你用std::bitset来表示你的数字。虽然以下内容不能解决您的问题,但我想知道它是否可以帮助您到达您想要的地方?

#include<iostream>
#include<iomanip>
#include<bitset>

struct Data {
  std::bitset<14> d1;
  std::bitset<14> d2;
  std::bitset<20> d3;
  std::bitset<25> d4;
  Data(unsigned int d1, unsigned int d2, unsigned int d3, unsigned int d4)
      : d1(d1),
        d2(d2),
        d3(d3),
        d4(d4) {}  
};

std::ostream& operator<<(std::ostream& os, const Data& data) {
  os<<data.d1<<"-"
    <<data.d2<<"-"
    <<data.d3<<"-"
    <<data.d4;
  return os;      
}

int main() {
  Data d(1341, 1, 987654, 20110411);
  std::cout<<d<<std::endl;
}

输出:

00010100111101-00000000000001-11110001001000000110-1001100101101110001001011
于 2013-05-01T22:22:52.127 回答
0

您可以分配一个足够大的数组来容纳所有数据:

unsigned char buffer[10];

然后用位移运算符<<和填充数据>>。要将来自多个源变量的位数组合到一个目标变量中,请使用按位或运算符|。例如:

unsigned short block1 = 0x05d3; // binary: 00000101 00111101
// first byte: 1 - 000101 0
buffer[0] = 1 << 7 | (block1 << 2) >> 9;
于 2013-05-01T22:22:18.633 回答