C++ c++;缺失端点转换法

C++ c++;缺失端点转换法,c++,endianness,C++,Endianness,我有一些部分的源代码,我正在尝试完全重建(不要问其余的在哪里,它不可用),我目前被一个缺少的方法“endianconvert”卡住了 我对C++没有太多的经验,所以我希望有人能帮我。这里是函数调用 endianConvert (reinterpret_cast<DWORD *>(pData+dwClassOffset), sizeof (PageTable) >> 2); dwclassoffset是文件中的当前位置 DWORD dwClassOffset = 0;

我有一些部分的源代码,我正在尝试完全重建(不要问其余的在哪里,它不可用),我目前被一个缺少的方法“endianconvert”卡住了

我对C++没有太多的经验,所以我希望有人能帮我。这里是函数调用

endianConvert (reinterpret_cast<DWORD *>(pData+dwClassOffset), sizeof (PageTable) >> 2);
dwclassoffset是文件中的当前位置

DWORD dwClassOffset = 0;
PageTable是一个包含多个DWORD变量的类


看起来我需要交换字节数组中几个DWORD的尾数,但我不知道如何开始实现,非常感谢您的帮助。

很可能是
endianConvert
函数将文件中的32位整数值转换为内存中的32位整数值。要实现它,您应该知道文件中使用了哪个endian,以及目标机器上使用了哪个endian。如果它们的endian相同,那么
endianConvert
应该保持数组的原样,否则它应该执行如下操作

uint32_t dw = *dword_ptr;
// flip bytes
dw = (dw >> 24) | ((dw >> 8) & 0xff00) | ((dw << 8) & 0xff0000) | (dw << 24);
*dword_ptr = dw;
uint32\u t dw=*dword\u ptr;
//翻转字节

dw=(dw>>24)|((dw>>8)和0xff00)|((dw表达式
>2
将对象的大小(以字节为单位)除以4,这将提供要转换的4字节字的数量,因此从一个执行多次操作的函数开始:

void endianConvert(DWORD* data, size_t count)
{
    for (size_t n = 0; n < count; ++n)
       /* convert data[n] */;
}
void endianConvert(DWORD*数据,大小\u t计数)
{
用于(大小n=0;n
现在,您需要能够交换单个DWORD的尾数,这非常简单:

DWORD& d = data[n];
DWORD b1 = d & 0x000000ff;
DWORD b2 = d & 0x0000ff00;
DWORD b3 = d & 0x00ff0000;
DWORD b4 = d & 0xff000000;
d = (b1 << 24) | (b2 << 8) | (b3 >> 8) | (b4 >> 24);
DWORD&d=数据[n];
DWORD b1=d&0x000000ff;
DWORD b2=d&0x0000ff00;
DWORD b3=d&0x00ff0000;
DWORD b4=d&0xff000000;
d=(b1 8)|(b4>>24);

提取每个字节,然后将其移到另一端的位置,或将字节放在一起。

谢谢,文件是大端的,机器是小端的,如果有区别的话。
DWORD& d = data[n];
DWORD b1 = d & 0x000000ff;
DWORD b2 = d & 0x0000ff00;
DWORD b3 = d & 0x00ff0000;
DWORD b4 = d & 0xff000000;
d = (b1 << 24) | (b2 << 8) | (b3 >> 8) | (b4 >> 24);