2012-03-22 106 views
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

回答

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 
} 

注意上面的代碼將會給你的矢量對象的二進制表示,但取決於你真正想要的東西,這可能不是你是啥子後。例如,這段代碼很可能不會給你指向向量的指針,因爲這些指針被包含在動態分配的數組中(很有可能),所以最好你會得到該數組地址的二進制表示。

如果你想包含的對象的二進制表示,以及你將需要大量的魔法,因爲是要弄清楚哪個字節sequece表示內部數組的地址,例如,沒有可移植的方法。或者你可以迭代遍歷矢量,並對各個內容對象執行類似的邏輯(在你的例子中是指針)。爲了處理這些正確,你將需要自定義代碼等

+0

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

+0

@DeadMG - OP在帖子裏說什麼要說指針?他提到想要物體本身的比特流。此外,即使是這樣,我也提出瞭如何得到指針的想法 – Attila 2012-03-22 02:42:08