【问题标题】:Converting subnet mask prefix with C用 C 转换子网掩码前缀
【发布时间】:2013-04-10 23:29:00
【问题描述】:

我想使用按位运算将 /24 之类的前缀转换为 255.255.255.0。

我尝试过像这样使用 unsigned int:

unsigned int mask = -(1 << 32 - prefix);

我正在考虑创建一个 while 循环,将 1 加到正确的位置,然后减为 0。

所有帮助将不胜感激!

【问题讨论】:

    标签: c ip-address bitwise-operators


    【解决方案1】:

    使用

    unsigned long mask = (0xFFFFFFFF << (32 - prefix)) & 0xFFFFFFFF;
    
    printf("%lu.%lu.%lu.%lu\n", mask >> 24, (mask >> 16) & 0xFF, (mask >> 8) & 0xFF, mask & 0xFF);
    

    【讨论】:

    • 感谢您的建议。我如何将其格式化为 /24 的 255.255.255.0?
    • 查看更新。您可以类似地使用sprintf() 来制作文本字符串。
    • 如果前缀 == 0 => 结果未定义!!!所以先检查零
    【解决方案2】:

    你试过了吗?

    #include <stdint.h>
    uint32_t mask = (-1) << (32 - prefix);
    

    一旦 -1 在 2-补码表示中是 0xFFFFFFFF,它就可以工作

    【讨论】:

    • 将负整数向左移动会调用未定义的行为。
    猜你喜欢
    • 1970-01-01
    • 2016-03-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-14
    • 1970-01-01
    • 2016-02-18
    • 1970-01-01
    相关资源
    最近更新 更多