我有8个变量,每个变量都包含一个IPV6地址元素。例如,如果IPV6地址为 2001:0db8:0000:0000:0000:002a:0000:2adf
比变量更像:
char [] a1 = 2001;
char [] a2 = 0db8;
char [] a3 = 0000;
char [] a4 = 0000;
char [] a5 = 0000;
char [] a6 = 002a;
char [] a7 = 015f;
char [] a8 = 2adf;
我将这些变量带入字符串流并显示。目前最终结果是: 2001:0db8:0000:0000:0000:002a:015f:2adf
我需要标准IPV6格式的最终结果,如: 2001:0db8 :: 2a:15f:2adf 。
任何人都可以帮助我吗?
答案 0 :(得分:1)
首先,不要将其存储为字符串!然后,当您将其存储为例如一个八项unit16_t
数组,然后您可以逐个打印它们,如果您注意到一个值为零,并且以下值也为零,则只需跳过零值的打印。
例如
uint16_t words[8] = {
0x2001, 0x0db8, 0x0000, 0x0000,
0x0000, 0x002a, 0x015f, 0x2adf
};
for (int i = 0; i < 8; i++)
{
if (i > 0)
std::cout << ':';
if (words[i] == 0 && i < 8 && words[i + 1] == 0)
{
while (words[i + 1] == 0)
++i;
continue;
}
std::cout << std::setfill('0') << std::setw(4) << std::hex << words[i];
}
std::cout << '\n';