【发布时间】: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