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

问题描述:

的我需要得到一个对象的位。换句话说,我想把一个对象当作原始数据,并提取它的0和1位。我怎样才能做到这一点?提取比特流(0和1)的对象

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

std::vector<NodeEntry *> vec; 

VEC点的一个对象。该对象在内存中,由0和1位组成。我怎样才能提取这个对象的位流(0和1)。

+0

你要得到一个指针数组的位? 这会有什么好处呢? – manasij7479 2012-03-22 01:51:23

+0

我想获取vec变量所引用的对象的位。我想在这些位上应用擦除码算法。换句话说,纠删码算法的输入是原始数据(0和1位)。 – ManiAm 2012-03-22 01:53:09

+1

将指针转换为char *或byte *或其他任何内容。当然,弄清楚物体的大小可能是一个挑战。 – 2012-03-22 01:53:39

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 
} 

注意上面的代码将会给你的矢量对象的二进制表示,但取决于你真正想要的东西,这可能不是你是啥子后。例如,这段代码很可能不会给你指向向量的指针,因为这些指针被包含在动态分配的数组中(很有可能),所以最好你会得到该数组地址的二进制表示。

如果你想包含的对象的二进制表示,以及你将需要大量的魔法,因为是要弄清楚哪个字节sequece表示内部数组的地址,例如,没有可移植的方法。或者你可以迭代遍历矢量,并对各个内容对象执行类似的逻辑(在你的例子中是指针)。为了处理这些正确,你将需要自定义代码等

+0

OP明确指出他想要*指针*的位流,而不是向量。 – Puppy 2012-03-22 02:30:43

+0

@DeadMG - OP在帖子里说什么要说指针?他提到想要物体本身的比特流。此外,即使是这样,我也提出了如何得到指针的想法 – Attila 2012-03-22 02:42:08