我有一個 C 代碼,它將指標地址作為引數。代碼引數是:
./main 0x7fad529d5000
現在在讀取引數時,該值將被讀取為字串。
如何將字串“0x7fad529d5000”轉換為地址?
uj5u.com熱心網友回復:
從標準輸入讀取十六進制:
uintptr_t x;
std::cin >> std::hex >> x;
從字串中讀取一個十六進制:
uintptr_t x;
// assuming you used argc / argv and checked argc > 1
std::istringstream sstr( argv[1] );
sstr >> std::hex >> x;
另一種選擇是x = std::stoll( argv[1] );
,但其中涉及我不太喜歡的演員表(假設寬度為uintptr_t
)。
將其轉換為指標:
void * p = reinterpret_cast<void *>(x);
小心處理該指標值,因為它不太可能有效。(reinterpret_cast
是應該對你大喊“危險!”的東西。)
uj5u.com熱心網友回復:
一種選擇是使用void*
如下所示:
void func( void *param )
{
//use param here
}
int main(int argc, char *argv[])
{
std::istringstream ss(argv[1]);
long int argInt = 0;
//convert string arg to int arg
ss >> std::hex >> argInt;
//call func
func(reinterpret_cast<void *>(argInt));
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/506469.html
上一篇:ORM增刪改查并發性能測驗2