簡體   English   中英

從uint8_t指針轉換為uint32_t整數編譯錯誤

[英]Cast from uint8_t pointer to uint32_t integer compilation error

編譯過程中顯示以下錯誤:

aes.c:267:35: error: cast from pointer to integer of different size [-Werror=pointer-to-int-cast]
    HWREG(AES_DMAC_CH0_EXTADDR) = (uint32_t)pui8MsgIn;

第275-276行:

// base address of the input data in ext. memory
HWREG(AES_DMAC_CH0_EXTADDR) = (uint32_t)pui8MsgIn;

pui8MsgIn是uint8_t *的類型。

HWREG宏看起來像這樣:

#define HWREG(x)                                                              \
        (*((volatile uint32_t *)(x)))

我對C及其指針沒有經驗,但可能我可以通過將uint32_t 強制轉換uintptr_t來解決它。 這是正確的嗎?

我想確認一下,因為uintptr_t似乎與uint32_t相反沒有任何大小。

大概我可以通過將uint32_t uintptr_tuintptr_t來解決它。 這是正確的嗎?

是。 uintptr_t被指定為無符號整數類型,其寬度足以容納任何指向整數的指針的轉換結果。

我想確認一下,因為uintptr_t似乎與uint32_t相反沒有任何大小。

這就是重點(沒有雙關語意)。 C沒有指定指針有多大,實際上它在實現之間有所不同。 如果必須容納所有實現的指針,則不能在類型名稱中指定特定大小。

暫無
暫無

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

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