2

関数呼び出しを行い、IPv6 アドレスを表す文字列の配列を受け取ることができます。それはこのように見えます

char* buffer=resolver_getstring(config, INI_BOOT_MESHINTFIPADDRESS);

バッファを印刷した場合、ipv6アドレスを文字列形式でゲートします:

dddd:0000:0000:0000:0000:0000:0000:cccc

ただし、私のプロジェクトで ipv6 アドレスを表す方法は、次のように uint8_t データ型を使用して 16 の 16 進数を使用することです。

uint8_t ipadress[16]

今私の問題は、uint8_t [16]にキャスト(またはバッファのメモリをコピー)する方法です

私が手に入れたいのは

    ipadress[0]=dd // hexadecimal number
    ipaddress[1]=dd
    ....
    ipaddress[15]=cc

とにかく私ができることはありますか?よろしく、

4

2 に答える 2

2
#include <stdint.h>
#include <inttypes.h>
...
char *buffer="dddd:0000:0000:0000:0000:0000:0000:cccc";
uint8_t ipadress[16];
sscanf(buffer,
    "%2" SCNx8 "%2" SCNx8 ":"
    "%2" SCNx8 "%2" SCNx8 ":"
    "%2" SCNx8 "%2" SCNx8 ":"
    "%2" SCNx8 "%2" SCNx8 ":"
    "%2" SCNx8 "%2" SCNx8 ":"
    "%2" SCNx8 "%2" SCNx8 ":"
    "%2" SCNx8 "%2" SCNx8 ":"
    "%2" SCNx8 "%2" SCNx8 ,
    &ipadress[0],&ipadress[1],
    &ipadress[2],&ipadress[3],
    &ipadress[4],&ipadress[5],
    &ipadress[6],&ipadress[7],
    &ipadress[8],&ipadress[9],
    &ipadress[10],&ipadress[11],
    &ipadress[12],&ipadress[13],
    &ipadress[14],&ipadress[15]);
于 2014-04-16T16:28:43.843 に答える
0

strtok()(コロン char で文字列を断片に分割するため)、strtol()(断片を 16 進数形式からバイナリに変換するため)、およびいくつかのビット シフトとシャッフル (結果の 16 ビット数値を 2 つの別々のバイトに分割するため)を調べる必要があります。.

于 2014-04-16T16:15:21.750 に答える