0

コンティキ内のモートのIPv6アドレスを出力するために、次のように書きました。

static void
print_ipv6_addr(const uip_ipaddr_t *ip_addr) {
    int i;
    for (i = 0; i <= 7; i++) {
        printf("%04x ", ip_addr->u16[i]);
    }
}

私の方法 は-を出力aaaa 0000 0000 0000 1202 0174 0100 0101しますが、coojaによって表示されるIPアドレスは-aaaa::212:7401:1:101です。

0000 0000 0000それは同じだと理解してい::ますが、残りの部分が「文字化け」しているのはなぜですか? ここで何が間違っているのでしょうか?

4

2 に答える 2

4

それはエンディアンの問題です。タイプは、uip_ipaddr_tネットワーク バイト オーダー (つまり、ビッグ エンディアン) を使用して IPv6 アドレスを格納する共用体ですが、プラットフォームは明らかにリトル エンディアンです。

すべてのプラットフォーム (自分のプラットフォームを含む) でアドレスを正しく出力するには、次のように、データ メンバーip_addrを使用して変数にアクセスする必要があります。u8

static void
print_ipv6_addr(const uip_ipaddr_t *ip_addr) {
    int i;
    for (i = 0; i < 16; i++) {
        printf("%02x", ip_addr->u8[i]);
    }
}
于 2014-07-28T20:03:32.647 に答える