2016-07-03 103 views
3

我仍然在學習C++,並花了數小時試圖找出一種方法來獲取存儲在某個內存地址的字節,在我的情況下,所有(好吧,幾乎所有)內存地址都不是動態的 - 所以指向,例如變量不會改變。從內存地址獲取字節?

所以我試圖檢索存儲在已知內存地址的單個字節。 例如,讓我們假設:0x20000

我試圖檢索的字節是,例如,假設我們說0xEF

現在我將如何檢索字節而不使用解除引用運算符? 所以基本上我需要得到0xEF而不必聲明它是什麼類型的數據類型,就像字面上只是物理上獲取字節0xEF。 希望這是有道理的,我是一個小菜鳥:/

+1

'uint8_t mybyte = *的reinterpret_cast (地址0x20000);' – md5i

+0

當你說'0xEF'是從內存位置'0x20000'的偏移量? – Galik

+0

如果Galik是正確的,那麼在我之前發佈的表達式中加入'0xef'。 – md5i

回答

3

現在我將如何檢索字節而不使用解除引用運算符?

如果不解除引用訪問的地址,則不能這樣做。您可以解決的最小數據類型是char。對於字節,通常使用typedef unsigned char uint8_t

因此,您必須使用reinterpret_cast<uint8_t*>(addr)訪問內存地址並取消引用以獲取該值。

1

取消引用內存地址是獲取字節值的唯一方法。

鑄字的內存地址的類型指針,然後解引用它是最直接方式,如:

unsigned char value = *(reinterpret_cast<unsigned char*>(0x20000)); 

然而,要回答你的問題:

如何將我檢索不使用解除引用運算符的字節

您可以解除引用使用memcpy()或類似的功能,內存間接如:

#include <cstring> 

unsigned char value; 
std::memcpy(&value, (void*)0x20000, 1);