的我需要得到一個對象的位。換句話說,我想把一個對象當作原始數據,並提取它的0和1位。我怎樣才能做到這一點?提取比特流(0和1)的對象
例如,我有稱爲VEC如下一個用戶定義類型的一個向量,
std::vector<NodeEntry *> vec;
VEC點的一個對象。該對象在內存中,由0和1位組成。我怎樣才能提取這個對象的位流(0和1)。
的我需要得到一個對象的位。換句話說,我想把一個對象當作原始數據,並提取它的0和1位。我怎樣才能做到這一點?提取比特流(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
}
注意上面的代碼將會給你的矢量對象的二進制表示,但取決於你真正想要的東西,這可能不是你是啥子後。例如,這段代碼很可能不會給你指向向量的指針,因爲這些指針被包含在動態分配的數組中(很有可能),所以最好你會得到該數組地址的二進制表示。
如果你想包含的對象的二進制表示,以及你將需要大量的魔法,因爲是要弄清楚哪個字節sequece表示內部數組的地址,例如,沒有可移植的方法。或者你可以迭代遍歷矢量,並對各個內容對象執行類似的邏輯(在你的例子中是指針)。爲了處理這些正確,你將需要自定義代碼等
你要得到一個指針數組的位? 這會有什麼好處呢? – manasij7479 2012-03-22 01:51:23
我想獲取vec變量所引用的對象的位。我想在這些位上應用擦除碼算法。換句話說,糾刪碼算法的輸入是原始數據(0和1位)。 – ManiAm 2012-03-22 01:53:09
將指針轉換爲char *或byte *或其他任何內容。當然,弄清楚物體的大小可能是一個挑戰。 – 2012-03-22 01:53:39