簡體   English   中英

將 char* 轉換為 int memory 地址

[英]Convert char* to int memory address

我有:

char* mem = (char*) 0xB8000;

然后將mem傳遞給 function。 在 function 內部,我想取回數字0xB8000並將其與其他一些整數進行比較。 如何將mem轉換回原來的 integer?

要將任何指針轉換為 integer,請執行以下操作:

#include <stdint.h>

uintptr_t ptr_to_integer(const void *ptr) {
    return (uintptr_t) ptr;
}

請注意, uintptr_t的大小可能因平台而異。 這也是 C 標准的可選部分,因此從技術上講,只有uintmax_t絕對是可移植的。

如何將 mem 轉換回原來的 integer?

通常轉換為(u)intptr_t將形成原始的 integer。

include <stdint.h>

printf("o: %lX\n", 0xB8000LU);
char* mem = (char*) 0xB8000;
printf("mem %p\n", (void *) mem);
uintptr_t i =  (uintptr_t) mem;
printf("i: %jX\n", (uintmax_t) i);

陷阱

C 未指定往返(u)intptr_tvoid *uintptr_t (或任何 integer 類型)以產生原始值。 甚至void * to (u)intptr_t to void *也只是指定返回一個等價的指針,不一定是相同的指針位模式。

未指定將任意數字(如(char*) 0xB8000為指針工作。

“結果是實現定義的,可能沒有正確對齊,可能不指向引用類型的實體,並且可能是陷阱表示”C17dr 6.3.2.3 5

(u)intptr_t可選類型——雖然很常見。 兼容的庫可能無法提供該類型。

(u)intptr_t沒有對應的打印說明符。 一個合理的解決方法是轉換為最廣泛的可用類型和打印。


我想取回數字 0xB8000 並將其與其他一些整數進行比較。

更好的方法可以將“其他整數”轉換為char *並比較指針。

最適合 OP 發布更大的代碼使用情況來處理總體目標。

謹慎行事。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM