【问题标题】:How to convert standard IP address format string to hex and long?如何将标准 IP 地址格式字符串转换为十六进制和长字符串?
【发布时间】:2020-09-15 12:49:27
【问题描述】:

有谁知道如何从标准 IP 地址格式字符串(“xxx.xxx.xxx.xxx”)中获取十进制或十六进制的 IP 地址?

我尝试使用 inet_addr() 函数,但没有得到正确的结果。

我在“84.52.184.224”上测试过

函数返回不正确的3770168404(正确结果为1412741344)。

谢谢!

【问题讨论】:

    标签: c++ format ip-address


    【解决方案1】:

    您刚刚得到了与预期相反的字节 - 它们位于 network byte order

    3770168404 = 0xE0 B8 34 54     network byte order
                   |         |
                    \       /
                     \     /
                      \   /
                       \ /
                       /\
                      /  \   
                     /    \
                    /      \
                   |        |
    1412741344 = 0x54 34 B8 E0     machine order
    

    您可以使用ntohl() 将网络顺序转换为机器顺序。

    【讨论】:

      【解决方案2】:

      仔细检查以下链接:

      http : // msdn.microsoft.com/en-us/library/ms738563(VS.85).aspx

      【讨论】:

        【解决方案3】:

        htonl、htons、ntohl、ntohs 函数可用于在网络和本地字节顺序之间进行转换。

        【讨论】:

          【解决方案4】:

          返回结果正确,字节按网络字节序排列

          84 => 0x54
          52 => 0x34
          184 => 0xb8
          224 => 0xe0
          0xe0b83454 => 3770168404
          

          【讨论】:

            【解决方案5】:

            我认为您可能遇到了字节顺序问题。从手册页:

            所有 Internet 地址均按网络顺序返回(字节顺序从 左到右)。返回所有网络号和本地地址部分 作为机器字节顺序整数值。

            【讨论】:

            • 我注意到字节顺序是相反的。 e0b83454 - 5434B8E0。感谢您的提示!
            猜你喜欢
            • 2023-03-05
            • 1970-01-01
            • 2013-02-07
            • 2012-07-22
            • 2013-05-10
            • 2012-09-13
            • 1970-01-01
            相关资源
            最近更新 更多