ConvertLengthToIpv4Mask(),不确定我是否正确?

问题描述 投票:0回答:1

我知道没有关于正在做什么的条目,但请确保有一些人熟悉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;
    }
}

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

如果没有?任何提示都很好吗?

谢谢:)

c++ windows visual-studio subnet
1个回答
0
投票

初学者解决方案

您可以使用该功能

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]);

yourString = 255.255.255.255

© www.soinside.com 2019 - 2024. All rights reserved.