2

我可以进行函数调用并接收代表 ipv6 地址的字符串数组。它看起来像这样

char* buffer=resolver_getstring(config, INI_BOOT_MESHINTFIPADDRESS);

如果我打印缓冲区,我将以字符串形式选通 ipv6 地址:

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

但是,在我的项目中如何表示 ipv6 地址的方式是使用 uint8_t 数据类型使用 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()(在冒号字符处将字符串分解为片段),strtol()(将片段从十六进制形式转换为二进制)以及一些位移和改组(将生成的 16 位数字分解为两个单独的字节) .

于 2014-04-16T16:15:21.750 回答