位运算 & 网络序字节序】的更多相关文章

一.初识位运算 位运算,见词明意,二进制运算,通常需要将运算数转换为二进制再进行处理,如果是在程序语言中则无需自己进行进制转换,基本的位操作符有如下几种:与(&).或(|).异或(^).取反(~).左移(<<).右移(>>),它们的运算规则如下所示: 扩展:进制转换 此处简单提一下进制转换:bit表示一个二进制位:byte表示一个字节(8bit),表示-128至127之间的整数值:整数234567的内存写照为:00000000 00000011 10010100  0100…
1 .谈到字节序,那么会有朋友问什么是字节序 非常easy:[比如一个16位的整数.由2个字节组成,8位为一字节,有的系统会将高字节放在内存低的地址上,有的则将低字节放在内存高的地址上,所以存在字节序的问题.] 2 .那么什么是高字节.低字节? 也相当简单:[一个16进制整数有两个字节组成,比如:0xA9. 高字节就是指16进制数的前8位(权重高的8位),如上例中的A. 低字节就是指16进制数的后8位(权重低的8位),如上例中的9. ] 大于一个字节的变量类型一般有两种表示方法: 比如:变量0x…
首先说明一下,本文是转载自: http://www.cnblogs.com/clover-toeic/p/3853132.html 博客园用的少,不知道怎么发布转载文章,只能暂时这样了. 引言 考虑下面的结构体定义: typedef struct{ char c1; short s; char c2; int i; }T_FOO; 假设这个结构体的成员在内存中是紧凑排列的,且c1的起始地址是0,则s的地址就是1,c2的地址是3,i的地址是4. 现在,我们编写一个简单的程序: int main(v…
IPv4套接字地址结构 struct sockaddr_in { uint8_t sinlen;(4个字节) sa_family_t sin_family;(4个字节) in_port_t sin_port;(2个字节) struct in_addr sin_addr;(4个字节) ]; }; sin_len:整个sockaddr_in结构体的长度,部分Linux内核版本没有该成员 sin_family:指定该地址家族,一般设置为AF_INET(使用TCP,UDP协议) sin_port:端口…
字节序:就是数据在内存中的存放顺序,也可称之为端模式. 大端模式和小端模式的定义 1) Little-Endian就是低位字节排放在内存的低地址端,高位字节排放在内存的高地址端. 2) Big-Endian就是高位字节排放在内存的低地址端,低位字节排放在内存的高地址端. 3) 网络字节序:TCP/IP各层协议将字节序定义为Big-Endian,因此TCP/IP协议中使用的字节序通常称之为网络字节序 什么是高位字节,低位字节? 一般一个16位(双字节)的数据,比如 FF1A (16进制),(4位二…
一.什么是socket socket可以看成是用户进程与内核网络协议栈的编程接口.socket不仅可以用于本机的进程间通信,还可以用于网络上不同主机的进程间通信. socket API是一层抽象的网络编程接口,适用于各种底层网络协议,如IPv4.IPv6,以及以后要讲的UNIX Domain Socket.然而,各种网络协议的地址格式并不相同,如下图所示: IPv4和IPv6的地址格式定义在netinet/in.h中,IPv4地址用sockaddr_in结构体表示,包括16位端口号和32位IP地…
15.2.10    主机字节序和网络字节序 当在基于intel处理器的linux机器上执行新版本号的server和客户程序时,能够用netstat命令查看网络连接状况.它显示了客户/server连接正在等待关闭.连接将在一段超时间之后关闭,例如以下所看到的: 能够看到这条连接相应的server和客户的port号.local address一栏显示的是server,而foreign address一栏显示的是远程客户(即使是在同一台机器上,它仍然是通过网络连接的).为了确保全部套接字都是不同的,…
一.什么是socket socket可以看成是用户进程与内核网络协议栈的编程接口. socket不仅可以用于本机的进程间通信,还可以用于网络上不同主机的进程间通信. socket API是一层抽象的网络编程接口,适用于各种底层网络协议,如IPv4.IPv6,以及以后要讲的UNIX Domain Socket.然而,各种网络协议的地址格式并不相同,如下图所示: IPv4和IPv6的地址格式定义在netinet/in.h中,IPv4地址用sockaddr_in结构体表示,包括16位端口号和32位IP…
一.字节序 字节序,也就是字节的顺序,指的是多字节的数据在内存中的存放顺序. 在几乎所有的机器上,多字节对象都被存储为连续的字节序列.例如:如果C/C++中的一个int型变量 a 的起始地址是&a = 0x100,那么 a 的四个字节将被存储在存储器的0x100, 0x101, 0x102, 0x103位置. 根据整数 a 在连续的 4 byte 内存中的存储顺序,字节序被分为大端序(Big Endian) 与 小端序(Little Endian)两类. 然后就牵涉出两大CPU派系: Motor…
字节序,分为高位在前和低位在前,说白了就是先从低操作还是从高位操作 java和网络的字节序是一致的,都是高位在前,这意味着java端序列化和反序列化时不用关心字节序的问题, 那问题是,那讨论字节序有什么意义那,假设c++和java通信,这时候c++端就需要考虑字节序,需要在序列化和反序列化时翻一下 这是mina IOBuffer提供的设置字节序的方法 IoBuffer order(ByteOrder bo): 这个方法设置是Big Endian 还是Little Endian,JAVA 中默认是…