【问题标题】:htonl and htons byte order conversionhtonl 和 htons 字节顺序转换
【发布时间】:2016-10-23 19:01:00
【问题描述】:

我是套接字编程的新手,我想出了htonshtonl 方法的网络字节转换机制。
文档说他们将 16 位或 32 位网络号从主机网络字节顺序转换为互联网字节顺序
那么当主机和网络共享相同的顺序时会发生什么
以及如何确定是否应该使用它们?

提前致意

【问题讨论】:

    标签: sockets unix htonl


    【解决方案1】:

    如果顺序相同,他们可能什么都不做。如果反过来它会交换它。始终将它们用于运输。两端都会明白的

    【讨论】:

      【解决方案2】:

      Network Byte Order 是大端。 hton...()ntoh...() 函数在大端机器上实际上是无操作的,它们在小端机器上交换字节。如果您正在实现的网络协议以网络字节顺序传输数字,则无论平台如何,您都应该始终调用这些函数。这样一来,所有出局的号码都保证从local endian转换为big-endian,所有入局的号码都保证从big-endian转换为local endian。

      【讨论】:

      • 是否可以检查您主机的endianness?如果是的话,你是怎么做到的,甚至有必要知道
      • @void_shad 这在技术上是可行的(并且有很多代码示例为此浮动),但在这种情况下没有必要,也不会真正为您带来任何好处。所有本地处理都应该使用本地字节序来完成,不管它是什么。编译器会为您处理这些问题。仅在传输/接收期间转换字节序,这就是转换功能发挥作用的地方。如果双方都遵守这些规则,即使双方使用不同的平台字节序,12345 的值在另一端仍然是 12345。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-02-14
      相关资源
      最近更新 更多