c++缺少endianconvert方法

c++ missing endianconvert method

本文关键字:方法 endianconvert 缺少 c++      更新时间:2023-10-16

我有一些部分源代码,我试图完全重建(不要问其余部分在哪里,它不可用),我目前被困在一个缺失的方法'endianconvert'

我没有太多的c++经验,所以我希望这里有人可以帮助我。下面是函数调用

endianConvert (reinterpret_cast<DWORD *>(pData+dwClassOffset), sizeof (PageTable) >> 2);

pData是一个字节数组,包含文件

的内容。
BYTE * pData = new BYTE[l];

dwclassoffset是文件

中的当前位置。
DWORD dwClassOffset = 0;

and PageTable是一个包含多个DWORD变量的类。

它看起来像我需要交换字节数组中的几个DWORDS的尾端顺序,但我不知道如何开始实现这一点,任何帮助是非常感激的。

最有可能的是,endianConvert函数将文件中的32位整数值转换为内存中的32位整数值。要实现它,您应该知道文件中使用的是哪个端序,以及目标机器上使用的是哪个端序。如果它们的端部相同,那么endianConvert应该保持数组不变,否则它应该执行

之类的操作。
uint32_t dw = *dword_ptr;
// flip bytes
dw = (dw >> 24) | ((dw >> 8) & 0xff00) | ((dw << 8) & 0xff0000) | (dw << 24);
*dword_ptr = dw;

>> 2表达式将对象的大小(以字节为单位)除以4,得到要转换的4字节字的数量,因此从执行多次的函数开始:

void endianConvert(DWORD* data, size_t count)
{
    for (size_t n = 0; n < count; ++n)
       /* convert data[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);

提取每个字节,然后将其移动到它在另一个端序中应有的位置,并将字节合在一起。