[英]pointers to point proper memory location
我正在编写一些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位。 现在,我想的最低显著32位发送input
到功能exp_d
。 我在做的是
QWORD expansion=exp_d(((DWORD*)input)+1);
我认为, input
是QWORD*
,因此首先将其类型转换为DWORD*
,然后将其递增1(以获取下一个DWORD
,即QWORD
最低有效32位)。 但是,当我exp_d
值传递给exp_d
,我得到的是input
的最高有效32位,而不是预期的最低有效32位。
我要去哪里错了?
如果输入的类型是QWORD
,则使用数字值:
(uint32_t) ((*input) & 0xffffffff)
如果无法修改函数exp_d
,则可能需要定义另一个函数,该函数将指针从64位指针返回至低32位。 在函数内部,根据您的系统字节序返回地址。
DWORD * GetDwordFromQword(const QWORD *input)
{
if(BigEndian()) {
return (DWORD*)input+1;
} else {
return (DWORD*)input;
}
}
BigEndian()
定义可以在此处引用以编程方式在C ++程序中检测字节序
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.