我正在编写一些C代码,其中包含以下内容:

typedef uint8_t BYTE;
typedef int8_t SBYTE;
typedef uint16_t WORD;
typedef uint32_t DWORD;
typedef uint64_t QWORD;


我有一个定义为QWORD exp_d(const DWORD *in)的函数。

我有一个指向的QWORD指针。作为QWORD,它是64位。现在,我想发送QWORD* input的最低有效32位以使用input函数。我在做的是

exp_d

我认为QWORD expansion=exp_d(((DWORD*)input)+1);input,因此首先将其类型转换为QWORD*,然后将其递增1(以获取下一个DWORD*,即DWORD的最低有效32位),事情。但是,当我将此值传递给QWORD时,我得到的是exp_d的最高有效32位,而不是所期望的最低有效32位。

我要去哪里错了?

最佳答案

如果不能修改函数exp_d,则可能需要定义另一个函数,该函数将指针从64位指针返回至低32位。在函数内部,根据您的系统字节序返回地址。

DWORD * GetDwordFromQword(const QWORD *input)
{
    if(BigEndian()) {
        return (DWORD*)input+1;
    } else {
        return (DWORD*)input;
    }
}


BigEndian()定义可以在这里参考Detecting endianness programmatically in a C++ program

关于c - 指向正确的内存位置的指针,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21630023/

10-12 20:43