將指針轉換為整數以實現64 位元相容性
現有的程式碼庫最初是為32 位元機器設計的,使用了一個函數一個void* 參數,隨後在該參數中轉換為適當的類型函數:
void function(MESSAGE_ID id, void* param) { if(id == FOO) { int real_param = (int)param; // ... } }
當將此程式碼適應64 位元環境時,編譯器會標記一個錯誤:
error: cast from 'void*' to 'int' loses precision
要解決此問題,需要進行修改以保持與32 位元的兼容性位元機器作為
解決方案
對於現代C 方法,reinterpret_cast <:uintptr_t>;作為理想的轉換機制。程式碼轉換如下:
#include <cstdint> void *p; auto i = reinterpret_cast<std::uintptr_t>(p);
指標儲存的正確整數型別
將指標儲存為整數的建議資料型別是 uintptr_t 或 intptr_t。這些類型位於
適當的轉換運算子
在 C 中,reinterpret_cast 是此轉換的首選轉換機制。它取代了 C 風格的強制轉換運算符,後者在 C 中不再受到青睞。
以上是如何安全地將指標轉換為整數以實現 64 位元相容性?的詳細內容。更多資訊請關注PHP中文網其他相關文章!