14may18_XXXXXL56endian40, 非洲XXXXXL56endian, may18_xxxxxl56endian
在当今的信息时代,数据和信息是一切的基础。为了方便存储、传输和处理数据,计算机因而需要使用二进制数来表示数字和字符,例如01001000表示字母H。然而,在计算机的架构中,由于字节在存储器中存储的方式不同,就会出现大小端问题,而14may18_XXXXXL56endian40、非洲XXXXXL56endian和may18_xxxxxl56endian都涉及了这个问题。
大小端问题是什么
在计算机中,数据是按二进制数字的形式存储的。而字节就是以八个二进制数字来表示的,即一个字节是8位二进制数。为了更好地管理数据,字节一般都被组织成字,一个典型的字由两个字节组成,即16位二进制数。当计算机字节的存储顺序是从高地址位开始到低地址位结束时,则称为大端字节序(Big Endian);反之,则称为小端字节序(Little Endian)。
举个例子,一个16位二进制数1001100110011000在大端字节序下会被分成两个字节:10011001 10011000,而在小端字节序下则会被分成另外两个字节:10011000 10011001。
对于不同的计算机体系结构,采用不同的字节序列有时给程序员和系统设计师带来了一些麻烦。因为不同的体系结构在存储数据和读取数据时的规则不同,如果程序员不考虑字节序可能导致数据读取时的错误。这时候,14may18_XXXXXL56endian40,非洲XXXXXL56endian,may18_xxxxxl56endian这些词语表示了字节序的问题。
如何判断一个系统使用的是大端还是小端字节序
在各种计算机架构和处理器中,如何判断该系统使用的是大端字节序还是小端字节序呢?
常见的判断方法是编写一个小的程序,在程序中定义一个多字节数据(例如16位或32位),为该数据指定一个固定值(例如0x12345678)。通过访问该多字节数据的第一个字节,即可确定该计算机的字节序,如果读出的值是0x12,则为大端字节序;如果读出的值是0x78,则为小端字节序。
14may18_XXXXXL56endian40,非洲XXXXXL56endian、may18_xxxxxl56endian这些词语反映了两个问题:第一个是不同日期的数据格式不同,第二个是不同地区的数据格式不同,但是都和大端和小端字节序有关。
为什么大小端字节序会引起问题
在CPU访问8位、16位、32位或64位的数据时,采用的地址方式是32位或64位地址。当CPU读取这些多字节数据时,会根据设计体系结构的字节序顺序来读取和转换多字节数据。如果程序员程序中硬编码了数据的内部表示或者数据在网络、文件或其他系统间传输,那么大小端字节序的转换会成为必选课题。如果两个使用不同端序的系统进行通信那么数据的接收方必须要跟发送方采用相同的字节序才可以顺利读取数据。否则,就会面对不可预期的问题。
换句话说,大小端字节序会直接影响程序的正确性,程序员在编写程序时必须了解目标平台的字节序并将其考虑在内。因此,关于大小端字节序这些问题需要在整个软件工程师的培训课程和维护过程中加以关注和掌握。
结论
大小端字节序问题可能不是很常见,但却是一个大家不得不关注和掌握的问题。不论您是做应用的程序员,还是服务端的开发人员,都应该对字节序列有所了解。掌握这个问题不仅可以避免硬件或者网络问题导致的数据格式错误,同时也有对程序性能的影响。因为选择正确的字节序列可以使得程序的读取数据更加高效。