时隔一个月又回到了博客园写文章,很开心O(∩_∩)O~~ 今天在做需求的涉及到一个固件版本的概念,其中固件组的人谈到了版本号从MSB到LSB排列,检索查阅后将所得整理如下. MSB.LSB? MSB(Most Significant Bit):最高有效位,二进制中代表最高值的比特位,这一位对数值的影响最大. LSB(Least Significant Bit):最低有效位,二进制中代表最低值的比特位 例如,在二进制的1001(十进制的9)中,最左边的“1”即是MSB对数值影响最大,从1到9的变化…
1.80X86使用小端法,网络字节序使用大端法. 2.二进制的网络编程中,传送数据,最好以unsigned char, unsigned short, unsigned int来处理, unsigned short ,unsigned short 以网络字节序处理后再拷贝到发送的buffer里 3.结构体前后要指定 #pragma  pack(1)  一.字节序 对于字节序(大端法.小端法)的定义<UNXI网络编程>定义:术语"小端"和"大端"表示多字节…
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:端口…
在上一篇文章网络编程:主机字节序和网络字节序中,介绍了主机字节序和网络字节序的基本概念以及在实际的编程中,何时需要进行网络字节序和主机字节序的转换.本篇文章着重介绍使用c++和python语言,如何实现主机字节序和网络字节序的相互转换.首先回顾一下主机字节序和网络字节序的概念: 主机字节序就是自己的主机内部,内存中数据的处理方式,要么是大端,要么是小端,取决于处理器类型和操作系统类型,和编程语言无关,如何判断主机的主机字节序是大端还是小端,请参见网络编程:主机字节序和网络字节序第4节中代码. 网…
1. 套接字地址结构 1.1 IPv4套接字地址结构 IPv4套接字地址结构通常也称为“网际套接字地址结构”,它以sockaddr_in命名,定义在<netinet/in.h>头文件中.下边给出它的定义: 1)struct in_addr专门用来存储IP地址,对于IPv4来说,IP地址为32位无符号整数.其定义如下: 注:in是internet缩写. struct in_addr { unsigned long s_addr; } 具体在<netinet/in.h>的定义是这样子的…
字节序(byte order)关系到多字节整数(short/int16.int/int32,int64)和浮点数的各字节在内存中的存放顺序.字节序分为两种:小端字节序(little endian)和大端字节序(big endian).小端字节序:低字节存放在内存低地址,例如对两字节整数0x0100(十进制数256),低字节00放在低地址(假设地址为0x0041f880),高字节01放在高地址0x0041f881.大端字节序:高字节在低地址,同样是0x0100,高字节01放在低地址(假设地址为0x…
大端字节序:整数的高位字节存储在内存的低地址处,低字节存储在内存的高地址处. 小端字节序:整数的高位字节存储在内存的高地址处,低字节存储在内存的低地址处. 一般pc大多采用小端字节序,也称为主机字节序. 网络上传输采用大端字节序,也称为网络字节序. linux中常用转换函数如下: #include <arpa/inet.h> uint32_t htonl(uint32_t hostlong); // 无符号长整形数值转换成网络字节序 uint16_t htons(uint16_t hostsh…
注意:结构体之间不能直接进行强制转换, 必须先转换成指针类型才可以进行结构体间的类型转换, 这里需要明确的定义就是什么才叫强制转换. 强制转换是将内存中一段代码以另一种不同类型的方式进行解读, 因此转换的空间必须与源空间一一对应. 而结构体则是由不固定的多种类型变量组合而成, 因此强制转换时并不确定原格式与目标格式确定的对应关系, 例如一个结构体为3个变量, 而另一个则为2个, 那么就无法确定如何分配. 因此最简单的让计算机可以理解的方式就是先将结构体转换成指针, 然后将指针转换成目标格式, 再…
在计算机设计之初,对内存中数据的处理也有不同的方式,(低位数据存储在低位地址处或者高位数据存储在低位地址处),然而,在通信的过程中(ISO/OSI模型和TCP/IP四层模型中),数据被一步步封装(然后加入信息首部),当传到目的段时,被一步步解封,然后获取数据.从上面我们可以看出,数据在传输的过程中,一定有一个标准化的过程,也就是说:从主机a到主机b进行通信,a的固有数据存储-------标准化--------转化成b的固有格式如上而言:a或者b的固有数据存储格式就是自己的主机字节序,上面的标准化…
最近使用C#进行网络开发,需要处理ISO8583报文,由于其中有些域是数值型的,于是在传输的时候涉及到了字节序的转换. 字节顺序是指占内存多于一个字节类型的数据在内存中的存放顺序,通常有两种字节顺序,根据他们所处的位置我们分别称为主机节序和网络字节序. 通常我们认为网络字节序为标准顺序,封包的时候,将主机字节序转换为网络字节序,拆包的时候要将网络字节序转换为主机字节序. 原以为还要自己写函数,其实网络库已经提供了. 主机到网络:short/int/long IPAddress.HostToNet…