小小函数不足挂

# #include <algorithm> // 包含std::copy
# auto it = std::find_if(recvDataList.begin(), recvDataList.end(), [](unsigned char d) {return d <= 0x7f; });
# 在 C/C++ 编程中,htonl 和 htons 是用于字节序转换的函数,它们声明在 arpa/inet.h 头文件中。
使用的头文件
#include <arpa/inet.h>
函数说明
    htonl(Host to Network Long)
        功能:将主机字节序的 32 位整数(long 类型)转换为网络字节序(大端)。
        使用场景:需要将主机字节序的 4 字节整数发送到网络时使用。
    htons(Host to Network Short)
        功能:将主机字节序的 16 位整数(short 类型)转换为网络字节序(大端)。
        使用场景:需要将主机字节序的 2 字节整数发送到网络时使用。
    对应的反向转换
        ntohl:将网络字节序的 32 位整数转换为主机字节序。
        ntohs:将网络字节序的 16 位整数转换为主机字节序。
示例代码
#include <arpa/inet.h>
#include <stdio.h>
int main() {
    unsigned long hostLong = 0x12345678;
    unsigned short hostShort = 0x1234;

    unsigned long netLong = htonl(hostLong);
    unsigned short netShort = htons(hostShort);

    printf("Host long: 0x%lx, Network long: 0x%lx\n", hostLong, netLong);
    printf("Host short: 0x%x, Network short: 0x%x\n", hostShort, netShort)
    return 0;
}

编译和运行

gcc -o byteorder byteorder.c
./byteorder

输出(示例,大端模式网络字节序)

Host long: 0x12345678, Network long: 0x78563412
Host short: 0x1234, Network short: 0x3412

您说:
#include <arpa/inet.h>  头文件里有什么
ChatGPT 说:
ChatGPT

头文件 <arpa/inet.h> 是 UNIX 系统中网络编程的一个重要头文件,主要提供了 IP 地址转换和字节序转换的函数。以下是这个头文件中常见的内容及功能:
1. IP 地址转换函数
inet_addr

    功能:将点分十进制的 IPv4 地址转换为网络字节序的 32 位地址。
    函数声明:

    in_addr_t inet_addr(const char *cp);

    参数:
        cp:指向点分十进制格式的 IPv4 地址字符串。
    返回值:
        成功:返回对应的网络字节序的 IPv4 地址。
        失败:返回 INADDR_NONE(例如无效的 IP 地址)。

inet_aton

    功能:功能类似 inet_addr,但更可靠。用于将点分十进制字符串转换为网络字节序的 IPv4 地址,并存储到 in_addr 结构中。
    函数声明:

    int inet_aton(const char *cp, struct in_addr *inp);

    参数:
        cp:点分十进制格式的 IPv4 地址。
        inp:指向存储转换后结果的 struct in_addr。

inet_ntoa

    功能:将网络字节序的 IPv4 地址转换为点分十进制字符串。
    函数声明:

    char *inet_ntoa(struct in_addr in);

    返回值:
        成功:返回指向静态缓冲区的点分十进制字符串。

inet_pton

    功能:将字符串形式的 IP 地址(支持 IPv4 和 IPv6)转换为网络字节序的地址。
    函数声明:

    int inet_pton(int af, const char *src, void *dst);

    参数:
        af:地址族(AF_INET 或 AF_INET6)。
        src:IP 地址字符串。
        dst:存储转换后结果的缓冲区。

inet_ntop

    功能:将网络字节序的 IP 地址(支持 IPv4 和 IPv6)转换为字符串形式。
    函数声明:

    const char *inet_ntop(int af, const void *src, char *dst, socklen_t size);

2. 字节序转换函数
htonl

    功能:将主机字节序的 32 位整数转换为网络字节序。
    声明:

    uint32_t htonl(uint32_t hostlong);

htons

    功能:将主机字节序的 16 位整数转换为网络字节序。
    声明:

    uint16_t htons(uint16_t hostshort);

ntohl

    功能:将网络字节序的 32 位整数转换为主机字节序。
    声明:

    uint32_t ntohl(uint32_t netlong);

ntohs

    功能:将网络字节序的 16 位整数转换为主机字节序。
    声明:

    uint16_t ntohs(uint16_t netshort);

3. 常量定义
INADDR_ANY

    含义:表示接受任意地址的特殊地址。
    常用于绑定服务器套接字,表示可以接收任意 IP 地址的数据包。
    定义:

    #define INADDR_ANY ((in_addr_t) 0x00000000)

INADDR_LOOPBACK

    含义:表示回环地址,通常是 127.0.0.1。
    定义:

    #define INADDR_LOOPBACK ((in_addr_t) 0x7f000001)

INADDR_BROADCAST

    含义:表示广播地址。
    定义:

    #define INADDR_BROADCAST ((in_addr_t) 0xffffffff)

INADDR_NONE

    含义:表示无效地址,通常用作错误返回值。
    定义:

#define INADDR_NONE ((in_addr_t) 0xffffffff)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值