我需要获取一个对象的位。换句话说,我想将一个对象视为原始数据并提取它的0和1位。我怎么能这样做?
例如,我有一个名为 vec 的用户定义类型的向量,如下所示,
std::vector<NodeEntry *> vec;
vec 指向一个对象。该对象在内存中,由0和1位组成。如何提取此对象的位流(0和1)。
答案 0 :(得分:0)
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
}
请注意,上面的代码将为您提供矢量对象的二进制表示,但根据您的实际需要,这可能不是您所追求的。例如,这段代码很可能不会给你放在向量中的指针,因为它们包含在一个动态分配的数组中(最有可能),所以最多你将获得该数组地址的二进制表示。
如果你想要包含对象的二进制表示,你将需要很多魔法,因为没有可移植的方法来确定哪个字节序列代表内部数组的地址,例如。或者您可以遍历向量并对各个内容对象(示例中的指针)执行类似的逻辑。要正确处理这些,您需要自定义代码等。