-1

我有 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

谁能帮我吗?

4

1 回答 1

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';
于 2013-11-09T19:05:07.573 回答