c++缺少endianconvert方法
c++ missing endianconvert method
我有一些部分源代码,我试图完全重建(不要问其余部分在哪里,它不可用),我目前被困在一个缺失的方法'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);
提取每个字节,然后将其移动到它在另一个端序中应有的位置,并将字节合在一起。
相关文章:
- 为不同配置设置MSVC_RUNTIME_LIBRARY的正确方法是什么
- 通过方法访问结构
- 最小硬币更换问题(自上而下方法)
- C++为构建时间获取QDateTime的可靠方法
- 在C#中处理C++指针而不使用unsafe的最佳方法
- 处理多个异常集合的C++方法
- 如果C++类在类方法中具有动态分配,但没有构造函数/析构函数或任何非静态成员,那么它仍然是POD类型吗
- 有什么方法可以遍历结构吗
- 当类在C++中定义时,有什么方法可以"register"类吗?
- 在C++中,将大的无符号浮点数四舍五入为整数的最佳方法是什么
- 实现无开销push_back的最佳方法是什么
- 使用std::函数映射对象方法
- 有符号的int和int-有没有一种方法可以在C++中区分它们
- C++从另一个类访问公共静态向量的正确方法是什么
- C++优先级队列,按对象的唯一指针的特定方法升序排列
- 没有为自己的结构调用列表推回方法
- 有没有什么方法可以使用一个函数中定义的常量变量,也可以由c++中同一程序中的其他函数使用
- 在类定义之后定义一个私有方法
- 枚举环境变量的惯用C++14/C++17方法
- c++缺少endianconvert方法