摘要:
在ASCII字符串(“192.168.0.99”)与网络字节序的二进制值间转换地址。涉及函数的头文件为#include<arpa/inet.h>一、只适用于IPv4协议的函数:int inet_aton(const char * string, struct in_addr* addr); //函数成功,返回值1,否则返回零。//将string所指的C字符串转换成32位的网络字节序二进制值,用个指针addr存储。in_addr_t inet_addr(const char * strptr);//返回值为32位的网络字节序二进制值;//出错时返回一个常值INADDR_NONE(32 阅读全文
摘要:
一、什么是大端小端 little endian :将低序字节存储在起始地址 big endian :将高序字节存储在起始地址 例如,16bit宽的数0x1234在Little-endian模式CPU内存中的存放方式(假设从地址0x4000开始存放)为:内存地址0x40000x4001存放内容0x340x12 而在big-endian模式CPU内存中的存放方式则为:内存地址0x40000x4001存放内容0x120x34二、怎样判断大端小端 联合体union的存放顺序是所有成员都从低地址开始存放 void JudgeEndian(){ union{ char a;... 阅读全文
摘要:
所谓对齐,是指元素存放在内存中的起始地址偏移量(1,2,4,...)。例如,int型数据(size=4),应存放在4的倍数地址的位置上。数据对齐方便了数据的查询,因为指针的偏移有一定的规律,但是这是以占有更多的内存空间为代价的。一、struct 自然对齐 元素对齐:按照元素的size进行 整体对齐:按照结构体中size最大元素进行二、#pragma pack(num) #pragma pack() 取消对齐 元素对齐: 按照#pragma pack指定的数值和这个数据成员自身长度中,比较小的那个进行。 整体对齐: 按照结构体中最大的数据成员 和 #pragma pack指定值... 阅读全文