验证大小端存储 :int main(){ int a = 0x12345678; char *p = (char *)&a; printf("%x\n", *p); // 78 表示这是小端存储 return 0;}字符数组:char name[] = { 'h', 'e', 'l', 'l', '...
分类:
其他好文 时间:
2014-09-02 17:07:15
阅读次数:
188
字节序的问题涉及硬件架构,目前主要是Motorola的PowerPC系列CPU和Intel的x86系列CPU。PowerPC系列采用big endian方式存储数据,而x86系列则采用little endian方式存储数据。那么究竟什么是big endian,什么又是l...
分类:
其他好文 时间:
2014-09-02 12:44:05
阅读次数:
211
网络数据包的封包与拆包
过程如下:
将数据从一台计算机通过一定的路径发送到另一台计算机。应用层数据通过协议栈发到网络上时,每层协议都要加上一个数据首部(header),称为封装(Encapsulation),如下图所示:
不同的协议层对数据包有不同的称谓,在传输层叫做段(segment),在网络层叫做数据包(packet),在链路层叫做帧(frame)。数据封装成帧后发到传输介质...
分类:
系统相关 时间:
2014-08-17 11:47:12
阅读次数:
560
http://bbs.chinaunix.net/thread-1257205-1-1.html#include #include #include int main(void){ unsigned short v = 0x0102; unsigned char *p = (unsigned c.....
分类:
编程语言 时间:
2014-08-14 14:00:08
阅读次数:
236
在写网络程序的时候,我们经常需要将结构体或者整数等数据类型序列化成二进制的buffer串。或者从一个buffer中解析出来一个结构体出来,最典型的就是在协议的header部分表征headlength或者bodylength在拼包和拆包的过程中,需要按照规定的整数类型进行解析,且涉及到大小端序的..
分类:
其他好文 时间:
2014-08-13 03:49:35
阅读次数:
10299
数字16的16进制表示为0x0010,数字4096的16进制表示为0x1000。由于Intel机器是小尾端,存储数字16时实际顺序为1000,存储4096时实际顺序为0010,注意是按字节来判定大小端的,即8个BIT为单位,而不是4BIT因此在发送网络包时为了报文中数据为0010,需要经过htons...
分类:
其他好文 时间:
2014-08-06 18:24:21
阅读次数:
209
机器大小端判断: 1 #include 2 3 typedef union{ 4 char x; 5 int i; 6 }un; 7 8 int main() 9 {10 un tt; 11 tt.i = 1;12 13 if(tt.x == 1)...
分类:
其他好文 时间:
2014-07-23 16:14:32
阅读次数:
337
copy#include //#include usingstd;typedefuint16;unsigneduint32; //短整型大小端互换 #defineBigLittleSwap16(A)((((uint16)(A)&0xff00)>>8)|\ //长整型大小端互换 #defineBi.....
分类:
其他好文 时间:
2014-07-22 22:46:34
阅读次数:
238
转自http://blog.csdn.net/delphiwcdj/article/details/6234383问题 :如何用程序确认当前系统的存储模式(大端还是小端)?写一个C函数,若处理器是Big-endian的,则返回0;若是Little-endian的,则返回1。情况1:利用数组类型#in...
分类:
其他好文 时间:
2014-07-22 22:45:33
阅读次数:
196