【问题标题】:ConvertLengthToIpv4Mask(), not sure did i get it correct?ConvertLengthToIpv4Mask(),不确定我是否正确?
【发布时间】:2016-08-14 15:27:22
【问题描述】:

我知道没有关于正在做什么的条目,但我确信有熟悉ConvertLengthToIpv4Mask()的人。

在我调用ConvertLengthToIpv4Mask()OnLinkPrefixLength 转换为子网掩码之后。

ConvertLengthToIpv4Mask() 给了我一个奇怪的数字“16777215”。

这是我不确定我做对的部分,奇怪的数字“16777215”是网络部分的 ULONG 表示,当我将它转换为位时,它给了我“111111111111111111111111”,然后我将它分成 8 部分位,我得到的结果是“255 255 255”

一小部分代码:

PIP_ADAPTER_ADDRESSES pCurrAddresses = NULL;
PIP_ADAPTER_UNICAST_ADDRESS pUnicast = NULL;
ULONG subnet = 0;
PULONG mask = &subnet;
pUnicast = pCurrAddresses->FirstUnicastAddress;

if (pUnicast != NULL)
{
    for (i = 0; pUnicast != NULL; i++)
    {   
        struct sockaddr_in  *sockaddr_ipv4;
        sockaddr_ipv4 = (struct sockaddr_in *)pUnicast->Address.lpSockaddr;
        printf("IPv4 pUnicast %s \n", inet_ntoa(sockaddr_ipv4->sin_addr));

        ConvertLengthToIpv4Mask(pUnicast->OnLinkPrefixLength, mask);

        pUnicast = pUnicast->Next;
    }
}

好的,我的问题是我做对了吗?

如果没有? 任何提示都会很棒?

谢谢你:)

【问题讨论】:

  • 该值等于0x00ffffff,这对我来说似乎是一个很好的掩码。你能详细说明你的问题吗?请read about how to ask good questions,并学习如何创建Minimal, Complete, and Verifiable Example
  • @JoachimPileborg 我的问题是,将“奇怪的数字”转换为掩码的好方法吗?
  • @Genato 已经是面具了。我认为您真正要求的是将掩码转换为点分格式的人类可读字符串,例如“255.255.255.0”,对吗?有几个函数可以做到这一点 - inet_ntoa()inet_ntop()RtlIpv4AddressToString() 等。
  • @RemyLebeau 很好,我一直在用一些疯狂的功能来解决如何将奇怪的数字转换为人类可读的字符串...inet_ntop() 效果很好.. thx :) +1跨度>

标签: c++ windows visual-studio subnet


【解决方案1】:

初学者解决方案

你可以使用该功能

union { ULONG ul; BYTE b[4]; } m; 
ConvertLengthToIpv4Mask(netmask_length, &m.ul);

下一步:

yourString.Format(L"%u.%u.%u.%u", m.b[0], m.b[1], m.b[2], m.b[3]);

你的字符串 = 255.255.255.255

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-08
    • 1970-01-01
    相关资源
    最近更新 更多