gpt4 book ai didi

c++ - htonl 不使用与网络相关的 header

转载 作者:搜寻专家 更新时间:2023-10-31 00:52:59 24 4
gpt4 key购买 nike

我们正在编写嵌入式应用程序代码并验证有效 I​​Pv4 格式的字符串。我可以使用字符串分词器成功地做到这一点,但现在我需要使用 htonl() 函数将整数转换为主机到网络顺序。

因为它是一个嵌入式应用程序,我不能为了使用 htonl() 函数而包含网络头文件和库。

C++ 中是否有任何方法/非网络 header 可以利用 htonl() 功能?

最佳答案

来自 htonl()的手册页:

The htonl() function converts the unsigned integer hostlong from host byte order to network byte order.

Network byte order实际上只是大端。

您需要做的就是编写(或找到)一个将无符号整数转换为大端字节序的函数,并用它代替 htonl。如果您的系统已经是大端模式,那么您根本不需要做任何事情。


您可以使用以下内容来确定系统的字节顺序:

int n = 1;
// little endian if true
if(*(char *)&n == 1) {...}

Source


您可以使用以下命令将小端 uint32_t 转换为大端:

uint32_t htonl(uint32_t x) {
unsigned char *s = (unsigned char *)&x;
return (uint32_t)(s[0] << 24 | s[1] << 16 | s[2] << 8 | s[3]);
}

Source

关于c++ - htonl 不使用与网络相关的 header ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50167471/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com