初始化函数1
1. 字节排序函数:
1.1 大端小端:
参考其他笔记或资料,一句话:低地址低位为小端.
1.2 常用函数:
#include <netinet.h/in.h> uint16_t htons(uint16_t va); uint32_t htonl(uint32_t va); uint16_t ntohs(uint16_t va); uint32_t ntohl(uint32_t va);
1. 作用:转换字节序,常用作端口字节序转换.
2. 符号意义: h代表host,n代表net,s代表16位,l为32位.
ps: l在64位中仍然是32位,最好别理解为long.
3. 实现细节: 在大端机器中,这些函数定义为空宏.
2. 字节操纵函数
2.1 源自Berkeley的函数:
#include <strings.h>
void bzero(void *dest, size_t nbytes);
void bcopy(const void *src, void *dest, size_t nbytes);
void bcmp(const void *ptr1, const void *ptr2, size_t nbytes);
2.2 ANSI C函数:
#include <strings.h>
void *memset(void *dest, int c, size_t len);
void *memcpy(void *dest, const void *src, size_t nbytes);
void memcmp(const void *ptr1, const void *ptr2, size_t nbytes);
2.3 两组函数:
copy类型函数的源指针和目标指针顺序相反.
memcpy不能处理内存重叠,bcopy和memmove都可以.
cmp函数,ptr1>pt2返回>0.
3. 地址转换函数:
使用inet_pton和inet_ntop兼容ipv4和ipv6. #include <arpa/inet.h> int inet_pton(int family, const char *strptr, void *addrptr) const char *inet_ntop(int family, const void *addrptr, char *strptr, size_t len)
1. 作用: 转换二进制网络序和我们熟悉的表达式.
2. 符号意义: p为presentation,n位numeric.
3. 特点: 适用于IPv4和6.
4. 细节: 字符串的长度在<netinet/in.h>中有定义:
#define INET_ADDRSTRLEN 16
#define INET6_ADDRSTRLEN 46
如果len太小,会返回空指针,errno=ENOSPC.
5. 历史: 曾经使用inet_aton等函数,现在这两个函数更通用.