如何判断计算机是大端还是小端方式,这个在网络传输时很重要,不然传回的数据解析时就会出错。哪有什么好的办法可以判断下吗,当然是有的,下面写一个控制台方式的,再写个函数调用式的。如有需要可以直接拿去使用。
大端字节序和小端字节序指的是什么?
现代CPU计算时一次都能装载多个字节(如32位计算机一次装载4字节),多字节的数值在内存中高低位的排列方式会影响所表示的数值,以int32类型的数值169756310(十六进制表示为:0x0103070f;二进制表示为:0b 00000001 00000011 00000111 00001111)为例,在内存中用4个字节存储,4个字节的内容分别是0x01(00000001)、0x03(00000011)、0x07(00000111)、0x0f(00001111)。根据字节高低位排序方式的不同,可以分为:大端字节序(big endian)和 小端字节序(little endian)
控制台方式:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
// ConsoleApplication13.cpp : Defines the entry point for the console application. // #include "stdafx.h" #include <stdio.h> int main() { unsigned int num = 0xaabbccdd; unsigned char* addr = (unsigned char*)# printf("地址:%-9x %-9x %-9x %-9x\n", addr, addr + 1, addr + 2, addr + 3); printf("数据:%-9x %-9x %-9x %-9x\n", *addr, *(addr + 1), *(addr + 2), *(addr + 3)); if (*addr == 0xdd) printf("小端字节序\n"); else printf("大端字节序\n"); return 0; } |
函数封装:
1 2 3 4 5 6 7 8 9 10 |
//梁笔记 bool IsLittleEndian() { bool Rtn = false; unsigned int num = 0xaabbccdd; unsigned char* addr = (unsigned char*)# (*addr == 0xdd) ? (Rtn = true) : (Rtn = false); return Rtn; } |