指向正确的内存位置的指针

时间:2014-02-07 14:17:36

标签: c pointers

我正在编写一些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* input。作为QWORD,它是64位。现在,我想将input的最不重要的32位发送到函数exp_d。我正在做的是,

QWORD expansion=exp_d(((DWORD*)input)+1);

我认为,inputQWORD*,所以首先将其类型转换为DWORD*,然后将其加1(到达下一个DWORD,即最少重要的32位QWORD)应该做的事情。但是,当我将此值传递给exp_d时,我得到input的最重要的32位而不是预期的最低32位。

我哪里错了?

2 个答案:

答案 0 :(得分:1)

如果输入的类型为QWORD

,请使用数值
(uint32_t) ((*input) & 0xffffffff)

答案 1 :(得分:0)

如果无法修改函数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