-1

8 つの変数があり、それぞれに IPV6 アドレスの 1 つの要素が含まれています。たとえば、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

2001:0db8::2a:15f:2adfのような標準 IPV6 形式の最終結果が必要です。

誰でも私を助けることができますか?

4

1 に答える 1

1

まず、文字列として保存しないでください。次に、たとえば8エントリのunit16_t配列として保存すると、それらを1つずつ印刷できます.1つの値がゼロで、次の値もゼロであることに気付いた場合は、ゼロ値の印刷をスキップします.

例えば

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 に答える