我正在Windows上编写一个用户空间文件系统驱动程序,字节顺序转换是我一直在处理的事情,因为这个特定的文件系统总是以小端字符顺序格式存储值,并且驱动程序希望(如果必要的话)为运行它的CPU转换这些值。然而,我发现自己在想,我是否甚至需要担心字节顺序转换,因为据我所知,桌面Windows只支持低端体系结构(IA32、x86-84等),因此,磁盘上的低端值在没有转换的情况下是非常好的。这种观察结果准确吗?如果是的话,假设Windows将始终在低端硬件上运行,这一假设是否普遍可接受?此外,有没有可能(在2011年)在大端仿真器或其他东西上运行Windows,这样甚至可以测试字符顺序问题?
编辑:为了更清晰,我的代码当前的工作方式,我在启动时执行字节顺序检查,然后每次我从磁盘加载一个值时,我通过一个内联函数运行它,如果体系结构是高字节顺序,该函数使用内部函数来更改字节顺序。问题是,我不知道我是否错过了其中一个或多个需要进行转换的地方,而查看我是否搞砸了的最简单方法是在大端架构上运行程序。所以我有兴趣知道(a)是否有必要做这些检查,因为Windows通常不在小端平台上运行(至少今天是这样),以及(b)我如何可能测试我的代码,因为我想不出一种在大端架构上运行Windows的方法,并且手动反转磁盘上的多字节值仍然涉及一个手动过程,我很可能会搞砸。
发布于 2011-06-23 13:07:26
你将看到的所有Windows版本都是小端的,是的。NT内核实际上运行在大端架构的even today上。
发布于 2011-06-23 13:08:30
更改后编辑问题:
A) No如果您的唯一目标是necessary x86或x64,则不需要检查字节顺序。在这种情况下,我甚至不会花时间检查字符顺序。
B)如果你想检查你的代码是否支持双端字节序,我建议你把它分成几个库,这些库本身就是跨平台可编译的。然后,在您最喜欢的支持big-endian的Linux版本上编译并运行代码,看看它是否工作。我还没有听说过任何编译器或软件可以检测双端问题。
原始响应:
据我所知,目前还没有支持大端的桌面或服务器版本的windows。安腾处理器(我相信它一直被称为IA64,而不是IA32,但我可能错了)有能力以高字节顺序运行,但Windows不支持它。
这并不是说Windows 8只会是低端的,因为Windows 8的目标是ARM处理器。
如果出于某些原因,你使用的是Windows (#ifdef,_WIN32)和大端( big-endian ),那么只需在从磁盘加载时反转数据结构,并始终以小端格式保存,这种格式要常见得多。
https://stackoverflow.com/questions/6449468
复制相似问题