gpt4 book ai didi

c - 使用 TCP 在 C 中发送两个字节

转载 作者:可可西里 更新时间:2023-11-01 02:52:13 25 4
gpt4 key购买 nike

我想知道发送两个字节作为一个整体或一个字节数组是否有任何绊倒或跌倒。

假设我要发送 uint16_t。像 uint8_t[2] 这样发送两个字节的数组还是一次只发送 16 位更好?

最佳答案

你需要记住的主要事情是endianness .也就是说,字节被解释的顺序在不同的平台上是不同的。

例如,您的 Intel CPU 可能会将字节字符串 0x01 0x00 解释为数字 1,但其他人的 PowerPC 会将该字节字符串解释为数字 256。

在构建网络协议(protocol)时,牢记此类问题非常重要。 (您可能会看到像 Google Protocol Buffers 这样的东西,它旨在解决这个问题)

由于您只讨论两个字节,因此您还应该看一下 htons() 宏。这会将一个 2 字节的值从主机顺序 转换为网络顺序。 (网络顺序是 big endian,而主机顺序通常是 little endian,但在 big endian 平台上 htons() 可以简单地定义为无操作。)如果你想发送 4 字节(32 位)值,你还应该看看 htonl() 宏。 htons 代表主机到网络短,并将您的 16 字节值转换为等效的 网络顺序 16 位值(如果您是在 Intel CPU 上,这意味着它将返回一个版本的 16 位整数,并交换了字节)。当您有传入字节时,您的代码应使用 ntohs(和 ntohl,用于 32 位值)宏将传入数据从网络字节顺序转换回主机顺序.

关于c - 使用 TCP 在 C 中发送两个字节,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19600117/

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