- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我需要在可能位于不同平台的服务器和客户端之间发送一个枚举缓冲区。
但是枚举的大小取决于平台,我应该调用哪个函数? (htons() 或 htonl()
),例如以下枚举:
typedef enum f_test_enum{
F0 = 0,
F1 = 1,
F2 = 2,
F3 = 3
} f_test_type;
记住 C 标准 (C99):http://www.open-std.org/JTC1/SC22/WG14/www/docs/n1256.pdf
6.7.2.2 枚举说明符
[...]
Constraints The expression that defines the value of an enumeration constant shall be an integer constant expression that has a value representable as an int.
[...]
Each enumerated type shall be compatible with char, a signed integer type, or an unsigned integer type. The choice of type is implementation-defined, but shall be capable of representing the values of all the members of the enumeration.
[编辑]如果我的枚举是:
typedef enum n_test_large_enum{
N1 = 0,
N2 = 1,
N2 = 2,
N120000 = 120000
} n_test_large_type;
或者也许:
typedef enum n_test_short_enum{
N0 = 0,
N1 = 1,
N2 = 2,
N60000 = 60000
} n_test_short_type;
当我使用 hton*() 或 ntoh*() 时,我应该注意枚举的可能值吗?我可以对所有枚举采取相同的行为吗?
最佳答案
只要双方同意编码,只有值很重要。
因此,只要您的值适合 short,那么 htons()
或 htonl()
都可以工作,前提是双方一致。
如果它真的适合一个字节,就发送它,使整个字节顺序问题消失。
关于c - htons()、htonl()、ntohs()、ntohl() 用于枚举,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37035341/
在以下关于小端和大端的程序中: char *s = "1234"; printf("%08X\n",*(int *)s); //big endian int little = ntohl(*s); p
我正在 Windows 上寻找一个头文件,我可以用它来获取 C 中的 ntohl 函数,但 Winsock2.h 对我不起作用。有谁知道其他什么头文件可以提供这个? 以下是我尝试包含 Winsock2
我一直在想,为什么我在使用write/read的时候不用htons/ntohl呢? (至少到目前为止我看到的所有例子都没有。) 我怎么知道接收到的字节具有正确的字节顺序? 最佳答案 好吧,如果您打算在
ip=ntohl(*(uint32_t*)PQgetvalue(result, i, 0)); 这段代码是什么意思? 我的猜测是此代码从 PostgreSQL 数据库(其类型为 uint32_t)获取
我正在编写一个跨平台客户端,在提取使用的文件中,它对每个文件使用 IEEE 802.3 以太网 CRC-32 校验和。我像这样对所有文件运行此检查: if(s3d_meta_block.crc !=
编辑:老实说,我不知道错误发生在哪里,所以我只添加大部分相关代码,不确定这是否有帮助 所以基本上我有两个基本的服务器和客户端进程。用户指定命令,客户端进程将消息长度发送给服务器,服务器执行命令并返回响
如果我对一个已经在主机字节顺序中的整数使用 ntohl() 会导致任何问题吗? 如果不是,ntohl() 函数如何知道它的参数已经在主机字节顺序中? 最佳答案 你的问题没有任何意义。对于 ntohl
我正在尝试使用适当字节交换的值来初始化一个全局范围的 const 变量。 #include #include #include const uint32_t a = ntohl(0x112233
我有一个项目需要在 Windows、Linux 和 VxWorks 上构建。该项目建立在 Linux 和 Windows 上,但为 VxWorks 交叉编译。为了处理跨多个平台的字节序,它使用 nto
我需要将网络字节顺序的结构 s1 复制到主机字节顺序的另一个结构 s2 我看到以下两种方法给出了不同的输出。我认为 method2 是正确的做法。我对么 ?如果是,我不明白为什么会有不同的输出。可能
我在某些主机上遇到了 socket.ntohl() 函数的问题。它在所有类似的主机上都是可重复的;使用 Python 2.4.2 的 32 位机器。 >>> socket.ntohl(16777215
我正在编写一个将保存和加载数据的小程序,它将是命令行(而不是交互式),因此没有必要包含我不需要包含的库。 当直接使用套接字时,我只是通过包含套接字来获得ntohl 函数,但是在这里我不需要套接字。我没
我正在尝试使用 unix 套接字来测试将一些 udp 数据包发送到本地主机。 据我了解,在设置 ip 地址和端口以发送数据包时,我会将转换为网络字节顺序的值填充到我的 sockaddr_in 中。我在
我尝试在 C 语言的服务器应用程序中打印客户端端口。但是我得到客户端端口的负数,这是什么奇怪的行为:-/任何人都知道哪里可能有问题吗? 导致问题的部分代码: struct sockaddr_in cl
C# 中是否有网络到主机的转换函数?谷歌搜索并没有找到太多。 :P 最佳答案 IPAddress.HostToNetworkOrder和 IPAddress.NetworkToHostOrder ?
关于htonl和ntohl。这两行代码中的任何一行何时将计算为false。 htonl(x) == ntohl(x); htonl(ntohl(x)) == htonl(htonl(x)); 换句
当我查找 htonl 的示例时,它总是返回一个 uint32_t。但是,当我使用 Winsock2.h 在 VS2015 中调用 htonl 时,它返回一个 u_long。 在我的机器上,当我为 32
我需要在可能位于不同平台的服务器和客户端之间发送一个枚举缓冲区。 但是枚举的大小取决于平台,我应该调用哪个函数? (htons() 或 htonl()),例如以下枚举: typedef enum f_
函数 ntohl 为我提供了一个链接器错误: error LNK2001: unresolved external symbol _ntohl@4 fatal error LNK1120: 1 unr
我在小端 [LE] 机器 [Linux,英特尔处理器] 上运行了以下程序。我无法解释下面代码片段中的 3 个输出。由于机器是 LE,a 的值存储为 0x78563412。打印时,它显示的是它的实际值。
我是一名优秀的程序员,十分优秀!