簡體   English   中英

將unsigned int轉換為unsigned long int C ++

[英]Typecast an unsigned int to unsigned long int C++

我對編程有點陌生。 我有這個問題。 我有一個變量

unsigned long address;

我正在使用

fscanf(pFile, "%x\n", &address);

從文件中讀取此數據。 該文件以Hex(無0x)格式存儲,並將其轉換為Decimal並存儲。 因此,我不太願意更改此部分。 當我使用g ++進行編譯時,它要求我將地址更改為

unsigned int address;

現在,此“地址”變量將在我將調用的函數中使用,該函數的參數為​​“無符號長整數”。 因此,如果我將“地址”設置為“ unsigned int”,該如何調用此函數

function(address);

這樣地址就被強制轉換成無符號的long

將地址傳遞給fscanf() ,類型必須與格式說明符完全匹配。 使用%x您將聲明要傳遞一個指向unsigned int的指針。 如果感覺要傳遞一個指向unsigned long的指針,則需要使用格式說明符%lx代替:

if (fscanf(pFile, "%lx", &address) == 1) {
    // ...
}

(我不能在不檢查輸入是否成功的情況下使用輸入功能...)。

您正在從錯誤的方向解決問題。

當對指針進行操作時,不能僅僅通過指向其他類型的指針來為對象添加別名。 %x轉換說明符指示scanf()采取unsigned int * ,因此,如果將unsigned long的地址傳遞給它,則會得到未定義的行為。 如果要掃描unsigned long ,請使用適當的修飾符:

unsigned long address;
scanf("%lx", &address);

但是,如果您確實希望將address更改為unsigned int ,則無需執行其他任何操作-將unsigned int傳遞給函數時,會將其隱式轉換為適當的類型(在這種情況下為unsigned long ) 。 不需要任何類型的轉換。 為了澄清,以下代碼是正確的:

void foo(unsigned long n) { }

unsigned int address;
scanf("%x", &address);
foo(address); // implicit conversion happens

在C中,您可以

function((unsigned long)address);

暫無
暫無

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

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