Binary Order function In Unix Network Programming
2015-01-09 22:16
441 查看
ByteOrder:
BinaryOrder.cc
网络协议必须制定一个网络字节序,在每个TCP分节中,都有16位的端口号和32位的IPv4地址。发送协议栈和接受协议栈 必须就这些多字节字段各个字节的传送顺序达成一致。
网际协议使用大端字节序来传送这些多字节整数。
主机字节序--->网络字节序:
#include<netinet/in.h>
uint16_t htons(uint16_t host16bitvalue);
uint32_t htonl(uint32_t host32bitvalue);
uint16_t ntohs(uint16_t net16bitvalue);
uint32_t ntohl(uint32_t net32bitvalue);
字节操纵函数:
#include <string.h>
void *memset(void *dest, int c, size_t len);
void *memcpy(void *dest, const void *src, size_t nbytes);
int memcmp(const void *ptr1, const void *ptr2, size_t nbytes);
ASCII 字符串---> 网络字节序的二进制值(存放在套接字地址结构中的值)之间 转换网际地址。
#include <arpa/inet.h>
int inet_aton( const char *strPtr, struct in_addr *addrPtr);
/** 返回: 如字符串有效则为1,否则为0**/
in_addr_t inet_addr(const char* strPtr);
/** 返回: 若字符串有效则为32位二进制网络字节序的IPv4地址, 否则为INADDR_NONE
char *inet_ntoa( struct in_addr inaddr);
/**返回: 指向一个点分十进制数串的指针**/
int inet_pton( int family, const char *strPtr, void *addrPtr);
/**若成功则为1, 若输入不是有效的表达格式则为0, 如出错则为-1**/
const char *inet_ntop( int family, const void *addrPtr, char *strPtr, size_t len);
/**返回:若陈宫则为指向结果的指针,若出错则为NULL**/
#include <stdio.h> int main(int argc, char**argv) { union { short s; char c[sizeof(short)]; } un; un.s = 0x0102; if ( sizeof(short) == 2 ) { if ( (un.c[0] == 1) && (un.c[1] == 2) ) { printf("big-endian\n"); } else if( (un.c[0] == 2) && (un.c[1] == 1) ) { printf("little-endian\n"); } else { printf("unknown byte order.\n"); } } else { printf("unsupport.\n"); } }
BinaryOrder.cc
网络协议必须制定一个网络字节序,在每个TCP分节中,都有16位的端口号和32位的IPv4地址。发送协议栈和接受协议栈 必须就这些多字节字段各个字节的传送顺序达成一致。
网际协议使用大端字节序来传送这些多字节整数。
主机字节序--->网络字节序:
#include<netinet/in.h>
uint16_t htons(uint16_t host16bitvalue);
uint32_t htonl(uint32_t host32bitvalue);
uint16_t ntohs(uint16_t net16bitvalue);
uint32_t ntohl(uint32_t net32bitvalue);
字节操纵函数:
#include <string.h>
void *memset(void *dest, int c, size_t len);
void *memcpy(void *dest, const void *src, size_t nbytes);
int memcmp(const void *ptr1, const void *ptr2, size_t nbytes);
ASCII 字符串---> 网络字节序的二进制值(存放在套接字地址结构中的值)之间 转换网际地址。
#include <arpa/inet.h>
int inet_aton( const char *strPtr, struct in_addr *addrPtr);
/** 返回: 如字符串有效则为1,否则为0**/
in_addr_t inet_addr(const char* strPtr);
/** 返回: 若字符串有效则为32位二进制网络字节序的IPv4地址, 否则为INADDR_NONE
char *inet_ntoa( struct in_addr inaddr);
/**返回: 指向一个点分十进制数串的指针**/
int inet_pton( int family, const char *strPtr, void *addrPtr);
/**若成功则为1, 若输入不是有效的表达格式则为0, 如出错则为-1**/
const char *inet_ntop( int family, const void *addrPtr, char *strPtr, size_t len);
/**返回:若陈宫则为指向结果的指针,若出错则为NULL**/
struct sockaddr_in addr; inet_ntop(AF_INET, &addr.sin_addr, str, sizeof(str)); struct sockaddr_in6 addr6; inet_ntop(AF_INET6, &addr6.sin6_addr, str, sizeof(str));
相关文章推荐
- functionclass[LeetCode]Construct Binary Tree from Preorder and Inorder Traversal
- functionclass[LeetCode]Construct Binary Tree from Inorder and Postorder Traversal
- leetcode 105. Construct Binary Tree from Preorder and Inorder Traversal
- Binary Tree Inorder Traversal
- Construct Binary Tree from Preorder and Inorder Traversal
- Leetcode 105. Construct Binary Tree from Preorder and Inorder Traversal
- 【leetcode】Binary Tree Inorder Traversal
- Binary Tree Inorder Traversal 二叉树中序遍历,使用堆栈,非递归
- LeetCode 105 Construct Binary Tree from Preorder and Inorder Traversal
- LeetCode No.106 Construct Binary Tree from Inorder and Postorder Traversal
- Leetcode94——Binary Tree Inorder Traversal
- 二叉树的中序遍历 Binary Tree Inorder Traversal
- Construct Binary Tree from Preorder and Inorder Traversal -- leetcode
- Construct Binary Tree from Inorder and Postorder Traversal
- LeetCode-106.Construct Binary Tree from Inorder and Postorder Traversal
- 105. Construct Binary Tree from Preorder and Inorder Traversal
- LintCode : Inorder Successor in Binary Search Tree
- Binary Tree Inorder Traversal [leetcode] 非递归的三种解法
- [LeetCode][Java] Construct Binary Tree from Preorder and Inorder Traversal
- LeetCode-Construct Binary Tree from Preorder and Inorder Traversal