我可以安全地假设Windows安装总是小端吗?

jgo*_*ula 27 windows endianness

我正在Windows上编写用户空间文件系统驱动程序,并且字节顺序转换是我一直在处理的事情,因为这个特定的文件系统总是以little-endian格式存储值,并且驱动程序应该为它们转换它们(如果需要)它是继续前进.但是,我发现自己想知道我是否需要担心字节序转换,因为据我所知,桌面Windows只支持小端架构(IA32,x86-84等),因此,盘上little-endian值非常精细,无法转换.这种观察是否准确,如果是这样,假设Windows将始终在小端硬件上运行通常是可以接受的吗?此外,甚至可能(在2011年)在大端模拟器或其他东西上运行Windows,甚至可以测试字节序问题?

编辑:为了更清楚,我的代码目前的工作方式,我在启动时进行字节顺序检查,然后每次我从磁盘加载一个值,我通过内联函数运行它,使用内在更改字节顺序,如果建筑是大端的.问题是,我不知道我是否可能错过了我需要进行转换的一个或多个地方,最简单的方法是看我搞砸了是在大端架构上运行程序.所以我有兴趣知道(a)是否甚至需要进行这些检查,因为Windows通常不会在小端平台上运行(现在无论如何),以及(b)我如何可能测试我的代码,看到我想不出在大端架构上运行Windows的方法,并且手动反转磁盘上的所有多字节值仍然涉及一个我可能搞砸的手动过程.

Ana*_*tts 8

您将看到的所有Windows版本都是little-endian,是的.即使在今天,NT内核实际上也在大端架构上运行.

  • 我对这个答案很困惑。您正在链接到 Xbox 360 的 Wikipedia 页面。这有什么相关性?“_Windows 的所有版本都是小端字节序_”,然后“_NT 内核在大端字节序上运行_”。那么*除了*XBox 操作系统之外的所有版本都是如此吗?如果您可以在答案中解释这一点或删除第二句话,那就太好了。 (5认同)
  • 没有!这是NT内核。 (2认同)

Nts*_*alt 6

更改问题后编辑:

A)如果您的唯一目标是Windows x86或x64,则无需检查字节顺序.在这种情况下,我甚至不会花时间检查字节顺序.

B)如果你想检查代码的双端支持,我建议将它分成可以跨平台编译的库.然后编译并运行支持big-endian的最喜欢的Linux风格的代码并查看它是否有效.我还没有听说过任何可以检测双端问题的编译器或软件.

原始回复:

据我所知,没有桌面或服务器版本的Windows支持big-endian.安腾处理器(我相信它总是被称为IA 64,而不是IA32,但我可能是错的)能够以big-endian运行,但Windows不支持它.

这并不是说Windows 8只是小端,因为Windows 8的目标是ARM处理器.

如果出于某种原因你在Windows上(#ifdef _WIN32)并且big-endian只是在从磁盘加载时反转数据结构,并且总是以小端格式保存,这种情况更为常见.

  • ARM 是双端字节序,通常默认为小端字节序,ARM 上的 Windows 8 很可能也是小端字节序。 (4认同)