从uint8_t指针转换为uint32_t整数编译错误

时间:2018-06-02 15:07:56

标签: c pointers casting

编译过程中出现以下错误:

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 相反,其名称中没有任何大小。

1 个答案:

答案 0 :(得分:3)

  

大概我可以通过将uint32_t强制转换为uintptr_t来解决此问题。   这是对的吗?

是。 uintptr_t被指定为无符号整数类型,足以容纳任何指向整数的指针的转换结果。

  

我想确认一下,因为uintptr_t似乎没有任何尺寸   其中的名字与uint32_t相反。

这就是重点(没有双关语意)。 C没有指定指针有多大,实际上它在实现之间有所不同。如果您必须适应所有实施,则无法在类型名称中指定特定大小。指针。