我可以进行函数调用并接收代表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
无论如何我能做到吗? 的问候,
答案 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位数字分成两个独立的字节)。