ConvertLengthToIpv4Mask(),不确定我是否得到正确的

ConvertLengthToIpv4Mask(), not sure did i get it correct?

本文关键字:是否 不确定 ConvertLengthToIpv4Mask      更新时间:2023-10-16

我知道没有我在做什么的条目,但我相信有人熟悉ConvertLengthToIpv4Mask()

我调用ConvertLengthToIpv4Mask()转换OnLinkPrefixLength得到子网掩码后。

ConvertLengthToIpv4Mask()给出了一个奇怪的数字"16777215"。

这是我不确定是否正确的部分,奇怪的数字"16777215"是网络部分的ULONG表示,当我将其转换为比特时,它给了我"111111111111111111111111111111111111",然后我将其分成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;
    }
}

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

如果没有?能给点提示吗?

谢谢你

初学者解决方案

可以使用函数

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