【问题标题】:Packing IP into a uint32将 IP 打包成 uint32
【发布时间】:2016-02-15 00:49:37
【问题描述】:

是否将 char IP[4] (192.168.2.1) 打包到 uint32 中作为任何 RSI/ISO/标准机构的一部分(即这里的任何人 https://en.wikipedia.org/wiki/List_of_technical_standard_organisations)?我知道它是一系列语言和工具的标准,但我想知道它是否是任何国际标准的一部分,如果是,是哪一个?这应该详细说明例如使用的字节顺序。

在我编写规范时需要知道,并且我不想通过描述技术来重新发明轮子。

【问题讨论】:

    标签: c ip iso


    【解决方案1】:

    在网络上发送的所有 IP 地址(事实上,标准网络堆栈中使用的所有多字节数字)都在“network order”中,即big-endian p>

    如何在程序中表示任何内容的四个字节取决于程序员,尽管他们通常让编译器决定哪个当然使用本机硬件使用的任何内容。

    来自Why is network-byte-order defined to be big-endian? ...


    RFC1700 表示必须如此。 (并将网络字节顺序定义为大端)。它现在已被RFC-3232 取代,但这部分保持不变。

    Internet 协议文档中的约定是 以十进制表示数字并以“大端”顺序显示数据 [科恩]。也就是说,字段是从左到右描述的,最多 左边的有效八位字节和最不重要的八位字节 对。

    他们的参考是

    On Holy Wars and a Plea for Peace 
    Cohen, D. 
    Computer
    

    可以在IEN-137this IEEE page 上找到摘要。

    总结:

    选择哪种方式不会做太多 区别。同意一个命令比什么命令更重要 订单已商定。

    得出的结论是,大端和小端方案都是可能的。没有更好/更差方案,只要在整个系统/协议中保持一致,就可以使用其中任何一个来代替另一个。

    【讨论】:

    【解决方案2】:

    这取决于 IPv4 地址的去向。

    对于实际的 IP 使用,即在网络数据包中,打包总是使用network byte order,即大端。

    如果您的用途有所不同,那么您当然可以随意定义包装。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-30
      • 2012-12-29
      • 1970-01-01
      • 1970-01-01
      • 2018-10-25
      • 1970-01-01
      相关资源
      最近更新 更多