什么时候担心字节序?

GAK*_*OKO 11 c endianness

我看过无数关于字节序的引用及其含义.我没有遇到任何问题...但是,我的编码项目是一个简单的游戏,可以在标准的"游戏玩家"硬件上运行在Linux和Windows上.在这种情况下,我是否需要担心字节序?我什么时候需要担心呢?我的代码很简单C和SDL + GL,唯一复杂的数据是基本媒体文件(png + wav + xm),游戏数据主要是字符串,整数布尔值(用于标志等)和静态大小的数组.到目前为止,没有用户遇到过问题,所以我想知道是否需要添加检查(稍后会做,但IMO还有更紧急的问题).

Mic*_*urr 6

您需要担心结束的时间:

  • 您正在机器或进程之间(使用网络或文件)发送二进制数据.如果机器可能有不同的字节顺序或使用的协议指定一个特定的字节顺序(它应该),你需要处理endianess.
  • 你有通过不同类型的指针访问内存的代码(比如unsigned int通过a 访问变量char*).

如果你做这些事情你就是在处理字节顺序,无论你是否知道 - 可能是你通过假设它是一种或另一种来处理它,只要你的代码没有,这可能会正常工作必须处理不同的平台.

与此类似,您通常需要在相同的情况下以及类似的原因处理对齐问题.再一次,你可能正在通过什么都不做并且让一切正常工作来处理它,因为你不必跨越平台边界(如果这确实成为一个要求,可能会回来咬你的路).


And*_*Dog 3

如果您指的是“标准游戏玩家硬件”的 PC,那么您不必担心字节序,因为它在 x86/x64 上始终是小字节序。但如果你想将项目移植到其他架构,那么你应该独立设计它的字节序。

  • 这掩盖了字节序问题最重要的领域:网络编程。发送多字节值(如 int 或 long)时,始终在主机和网络字节顺序之间进行转换。 (7认同)