繁体   English   中英

获取具有32位地址的64位值

[英]Get a 64 bit value with a 32 bit address

我有一个32位的地址

uint32_t ptrToValue;

我希望从这个内存位置获得64位值。

如果我喜欢这个

uint64_t value = *(uint64_t*) ptrToValue;

我收到警告“制作一个不同整数的指针”

我该怎么处理?

使用正确大小的整数类型: intptr_t 这是一个完整的类型,保证可以转换为指针和返回。

我有一个32位的地址

可能你的意思是你有一个指向32位(4字节)内存的指针。

uint32_t ptrToValue;

你是这个意思?:

uint32_t * ptrToValue;

当你添加*时,警告应该消失。

正如jogojapan在评论中提到的那样忽略了对齐问题,所以让我解释一下。

如果组合的64位值在64位边界(一个字节地址可被8整除),那么如果你想要转换指针并一次读/写64位就没有问题。 但是,如果不是, 并且您的机器不支持未对齐访问,则会发生不良事件(即程序崩溃)。

如果您希望代码在任何机器上运行(至少那些可以同时存储64位的机器),您将不得不使用联合:

typedef union {
    uint32_t b32[2];
    uint64_t b64[1];
} bits64;

然后,您可以声明bytes8类型的变量,并使用b32[0]b32[1]b64[0]具体取决于您是要将其解释为32位还是64位值。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM