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

时间:2011-06-23 04:51:52

标签: windows endianness

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

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

2 个答案:

答案 0 :(得分:8)

您将看到的所有Windows版本都是little-endian,是的。 NT内核实际上运行在大端架构even today上。

答案 1 :(得分:5)

更改问题后修改:

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在从磁盘加载时简单地反转数据结构,并且总是以小端格式保存,这是更常见的。