我可以进行函数调用并接收表示 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
我还能做什么吗? 问候,
最佳答案
#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]);
关于将 char* 转换为 uint8_t 数组 (c),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23114241/