2011-03-04 19 views
1

我想映射一部分進程內存作爲字節數組。 如何做到這一點?specyfic地址的字節數組C++

我有字節數組:

byte AmmoBytes[3] 

而且我想這個數組的地址0xXXXXXXX啓動; 如何做到這一點?

回答

5
byte (& a)[3] = *reinterpret_cast<byte (*)[3]>(0xDEADBEEF); 
+0

只是爲了記錄,'byte(*)[3]'的類型是什麼? – ThomasMcLeod 2011-03-07 20:46:37

+0

@ThomasMcLeod:它是一個**指向3字節元素的數組**的指針。 – wilx 2011-03-07 22:18:28

+0

所以,在這種情況下,'a'是一個3元素字節數組的引用,它綁定到內存地址0xDEADBEEF? – ThomasMcLeod 2011-03-08 02:10:30

3
byte * AmmoBytes = (byte *) 0xXXXXXXXX; 
2

這是不安全的,但你能說

byte * AmmoBytes = (byte *) 0xXXXXXXXX

0

一般來說,你不能可靠地做到這一點。

如果0xXXXXXXX表示硬件地址,那麼您需要編寫一個設備驅動程序來獲取對內存的內核訪問權限。

如果這是一個正常的內存地址,那麼不能保證它映射到有效的內存位置,並且很可能會導致程序崩潰。

你真的想在這裏做什麼?

+0

許多簡單的嵌入式系統不需要內核訪問。只需將地址加載到指針就足夠了。 – 2011-03-04 17:47:07

0

我將宣佈使用恆定指針存儲器:

byte * const AmmoBytes = (byte * const) 0xFFFF000; 

聲明指針作爲常數有助於編譯器檢測錯誤,例如錯誤地改變指針值的替代值由指針指向。