将mac转换为英特尔芯片是否意味着我们已经完成了对二进制资源中的数字进行交叉平台数据分发的工作?
这是这个问题的最后一个还是有其他一些我不知道的平台?
您似乎忘记了超越处理器架构的字节序.有许多算法和协议要求特定的字节顺序.例如,我花了两周时间试图让MD5哈希算法工作,只是意识到我已经假设网络字节顺序(Big Endian),而Ronald Rivest假设(在RFC中没有说明)实现者会使用Little字节序字节顺序.
提醒我有时伤害那个男人.:-P
好吧,实际上还有很多大端的CPU遗留下来.
实际上PPC并没有死.你知道,Xbox360使用PPC CPU(这是一个很好的例子,这些CPU没有声誉那么糟糕 - Xbox360不是很慢).好吧,这个可能不算PC.
但服务器是否算作PC?仍然有很多服务器使用Sun的UltraSparc CPU,它们通常都是大端,尽管最新型号可能是大端或小端.有许多CPU可以是一个或另一个(例如ARM,仍然在许多设备中使用,如移动电话等),因为支持两者都为硬件和软件供应商增加了最大的灵活性.即使是IA64 CPU(Intanium,在AMD发明x86-64之前打算取代x86,这是真正的64位,只能模拟32位,不像x86-64,可能两者都是)可以是CPU之一切换到大端.可以是两者的CPU都称为双端.
实际上,如果您暂时忽略英特尔(和兼容的CPU),市场上的大多数CPU都是大端或至少是双端的,尽管据我所知,大多数CPU都没有在任何消费者PC中使用.
但是,我认为没有像许多程序员那样的endian问题.每个现代CPU都可以在硬件中交换endian.实际上,如果你在一个小端的英特尔CPU上编写一个程序,它会交换从内存中读取的每个整数的字节顺序,并在写回内存时再次,这可能会导致性能损失低至5%; 实际上,您只需要为进入和离开应用程序的数据交换endianess,因为在您的应用程序中,endianess当然是不变的.
另请注意:我所知道的几乎所有网络协议都将字节顺序指定为大端,TCP/IP是最熟悉的系列.因此,如果您在较低的网络层上工作,您将始终必须继续交换字节.