交换字节 在计算领域存在两种不同的字节顺序处理方法(或者说是endian 格式)。endian 格式指定了如何在内存中存储多字节数值中的各个字节;Big-endian 的字节顺序处理方式表示存储多字节数据的时候权重最大的字节放在前面。Little-endian 的字节顺序处理方式则表示存储多字节数据的时候权重最小的字节放在前面。PowerPC 处理器使用 big-endian 的字节顺序处理方式,x86 处理器家族则使用 little-endian 的字节顺序处理方式。根据约定,多字节的数据在网络上发送的时候,使用big-endian 的字节处理方式。 如果您的应用程序假定数据是某种endian 格式,而实际上数据使用的是另一种格式,则程序就会不正确地解析数据。您需要对代码中负责从磁盘或者网络读取多字节的数据(16 位,32 位,或者64 位),或者将多字节数据写入到磁盘或网络的例程进行分析,因为这些例程对于字节顺序格式相当敏感。有两个常见的处理字节顺序差别的方法:在必要的时候进行字节交换,或者使用 XML 或其它与字节顺序无关的数据格式,比如 Core Foundation 框架中的格式(CFPreferences,CFPropertyList,CFXMLParser)。 采用字节交换的方法,还是使用与字节顺序无关的数据格式存储数据,取决于您在应用程序中如何使用数据。如果您需要支持某个现有的文件格式,则二进制兼容的解决方案是首先接受应用程序中已经在使用的big-endian 文件格式,然后书写字节交换代码,在x86 系统上读写文件时使用。如果不需要支持老的文件,则可以考虑重新设计文件格式,以使用 XML(extended markup language,即扩展的标志语言),XDR(external data representation,即外部数据表示),或者NSCoding(Objective C)来表示数据。 本章接下来的部分将描述为什么字节顺序会带来问题,给出交换字节的指导原则,描述 Mac OS X 中提供的字节交换API,并且对大多数与字节顺序有关的情况提供解决方案。 本部分包括如下主要内容: 为什么字节顺序会带来问题 交换字节的指导原则 字节交换例程 字节交换策略 为字节交换数据书写和安装一个回调函数 相关信息 为什么字节顺序会带来问题 这个部分的例子的设计目的是更为详尽地向您展示字节顺序为什么会带来问题。请看一下列表 3-1 中定义的C 语言的数据结构。它包含一个四个字节的整形数,一个字符串,以及一个双字节的整形数。列表中的代码还初始化了这个结构。 列表 3-1 : 包含多字节和单字节的数...