我需要将4个数据复制到字节数组中,但需要将数据复制到特定的位位置。
这是一个例子。
我的4个数据如下。它们按照从左到右的顺序排列,如二进制文件中所详述,并用连字符分隔,以便可见:
完成了必要的输出:
0C 53 D0 00 7C 48 1A 65 B8 97
并且在二进制中,第一位和最后一位是奇偶校验:
1-00010100111101-00000000000001-11110001001000000110-1001100101101110001001011-1
我对如何做到这一点感到茫然。有可能以某种方式使用位移?
答案 0 :(得分:3)
我建议您使用std::bitset
来表示您的号码。虽然以下 NOT 解决了您的问题,但我想知道它能帮助您到达您想要的位置吗?
#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
答案 1 :(得分:0)
您可以分配一个足以容纳所有数据的数组:
unsigned char buffer[10];
然后使用按位移位运算符<<
和>>
填充数据。要将来自多个源变量的位数组合到一个目标变量中,请使用按位或运算符|
。
例如:
unsigned short block1 = 0x05d3; // binary: 00000101 00111101
// first byte: 1 - 000101 0
buffer[0] = 1 << 7 | (block1 << 2) >> 9;