我正在编写一些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/