我看过无数关于字节序的引用及其含义。我没有遇到任何问题...... 但是,我的编码项目是一个简单的游戏,可以在标准的“游戏玩家”硬件上运行在Linux和Windows上。 在这种情况下,我是否需要担心字节序?我应该什么时候担心呢? 我的代码很简单C和SDL + GL,唯一复杂的数据是基本媒体文件(png + wav + xm),游戏数据主要是字符串,整数布尔值(用于标志等)和静态大小的数组。到目前为止,没有用户遇到过问题,所以我想知道是否需要添加检查(稍后会做,但IMO还有更紧急的问题)。
答案 0 :(得分:5)
您需要担心结束的时间:
unsigned int
访问char*
变量)。 如果您执行这些操作,那么无论您是否知道它都处理字节顺序 - 可能是您通过假设它是一种或另一种方式来处理它,只要您的代码可以正常工作不必处理不同的平台。
类似地,您通常需要在相同的情况下以及类似的原因处理对齐问题。再一次,你可能正在通过什么都不做并且让一切正常工作来处理它,因为你不必跨越平台边界(如果这确实成为一种要求,可能会回来咬你的路)。
答案 1 :(得分:2)
如果您的意思是“标准游戏硬件”的PC,那么您不必担心字节序,因为它在x86 / x64上始终是小端。但是如果你想将项目移植到其他架构,那么你应该独立设计它的字节序。
答案 2 :(得分:1)
如果您的游戏需要在不同的硬件架构上运行,您只需要担心它。如果你肯定它将始终在英特尔硬件上运行,那么你可以忘掉它。如果它可以在Linux上运行,虽然许多人使用不同于英特尔的架构,你最终可能不得不考虑它。
答案 3 :(得分:1)
您是否以源代码形式向您发送游戏?
因为如果您仅将游戏作为二进制文件分发,那么您就可以准确了解游戏将在哪些处理器系列上运行。此外,媒体文件是用户生成的(可能是通过关卡编辑器),还是仅供自己提供?
如果这是一个真正封闭的环境(你的分发二进制文件和游戏资产不是为了定制),那么你就知道自己对结尾的风险了,我个人不会愚弄它。
但是,如果您要么分发来源和/或希望人们可以自定义他们的游戏,那么您可能会担心。然而,由于现在大多数台式机/笔记本电脑都转向x86,我认为这是一个日益减少的问题。
答案 4 :(得分:1)
每当您从网络接收/传输数据时,请记住转换为网络和主机字节顺序。我们应该使用C函数htons
,htonl
等,或者您的语言中的等价函数。
每当您从文件中读取多字节值(如UTF-16字符或32位整数)时,由于该文件可能源自具有不同字节序的系统。如果文件是UTF 16或32,则它可能具有BOM(字节顺序标记)。否则,文件格式必须以某种方式指定字节序。
答案 5 :(得分:0)
网络问题以及数据发送方式以及在不同处理器上进行数字处理时会出现问题,因为不同的处理器可能会以不同的方式将数据存储在内存中。
答案 6 :(得分:0)
我相信Power PC具有与英特尔主板相反的字节顺序。可能有一个例程,设置依赖于体系结构的字节顺序?我不确定你是否能真正告诉代码中的硬件架构是什么......也许更聪明的人确实知道这个问题的答案。
现在参考你的声明“标准”Gamer H / W,我会说通常你会看看消费者现成解决方案确实是大多数标准游戏玩家所使用的,所以你几乎要去确保全面获得相同的endian。我相信有人会不同意我,但这是我的$ .02
哈......我刚才注意到右边有一个链接显示与我上面的建议有关。