将char *转换为uint8_t(c)数组

时间:2014-04-16 15:48:10

标签: c char ipv6 uint8t

我可以进行函数调用并接收代表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

无论如何我能做到吗? 的问候,

2 个答案:

答案 0 :(得分: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]);

答案 1 :(得分:0)

你需要调查strtok()(将字符串分解为冒号字符串),strtol()(将片段从十六进制形式转换为二进制)以及一些位移和改组(将产生的16位数字分成两个独立的字节)。