提取对象的比特流(0和1)

Extract the bit stream (0 and 1) of an object

本文关键字:取对象 提取      更新时间:2023-10-16

我需要获取对象的位。换句话说,我想把一个对象当作一个原始数据,并提取它的0和1位。我该怎么做?

例如,我有一个用户定义类型的向量,称为vec,如下所示,

std::vector<NodeEntry *> vec;

vec指向一个对象。此对象在内存中,由0位和1位组成。如何提取此对象的比特流(0和1)。

vector<NedeEntry*> vec;
// populate vec
char* rawData = reinterpret_cast<char*>(&vec);
for (char* tmp=rawData; tmp != rawData+sizeof(vec); ++tmp) {
  // extract 0s and 1s from *tmp
} 

请注意,上面的代码将为您提供矢量对象的二进制表示,但根据您实际想要的内容,这可能不是您想要的。例如,这段代码很可能不会给你放在向量中的指针,因为这些指针包含在动态分配的数组中(很可能),所以你最多只能得到该数组地址的二进制表示。

如果您也想要所包含对象的二进制表示,您将需要很多技巧,因为例如,没有可移植的方法来计算哪个字节序列表示内部数组的地址。或者,您可以遍历向量,并对各个内容对象(示例中的指针)执行类似的逻辑。要正确处理这些问题,您需要自定义代码等。