c - 如何在 uin8_t 类型的结构成员中复制 mac-address 字符串
问题描述
使用 snprintf 函数获得的意外 MAC 地址值
为什么我得到“意外的mac地址值。我有大字符串(无符号字符数据[DATA_LEN])来解析和复制mac地址到结构成员。我得到完全不同的字符串。请帮忙,谢谢。
输入数据字符串:
unsigned char data[512] = "its-STRING: 18 22 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 AC 12 00 20 00 00 00 C8 8C DF 9D 57 12 20 00 00 00 29 \n";
程序的输出
Parsed Mac from string = 8C DF 9D 57 12 20
copied MacAddress == 32:30:3a:33:38:00
从上面提到的字符串中,我必须提取 MAC 地址“8C DF 9D 57 12 20”,然后我必须将此 MAC 地址复制到以下结构中
typedef struct my_stuct_s{
uint8_t mac_addr[18];
}my_stuct_t;
下面是我的编码方式。
#define PARSE_OFFSET 89
#define END_OFFESET 19
#define DATA_LEN 512
#define ADDR_LEN 6
typedef struct my_stuct_s{
uint8_t mac_addr[ADDR_LEN];
uint8_t item;
}my_stuct_t;
int main()
{
unsigned char data[DATA_LEN] = "its-STRING: 18 22 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 AC 12 00 20 00 00 00 C8 8C DF 9D 57 12 20 00 00 00 29 \n";
unsigned char strv6[ADDR_LEN];
unsigned char *data1 = NULL;
my_stuct_t shm_memory;
memset(strv6, 0,sizeof(strv6));
memset(&shm_memory, 0,sizeof(my_stuct_t));
if ((strcmp(data, "") ) != 0)
{
data1 = &data[0];
data1 = data1 + PARSE_OFFSET;
snprintf(strv6, END_OFFESET,"%s\n", data1);
printf("Parsed Mac from string = %s\n", strv6);
snprintf((char *)&shm_memory.mac_addr, ADDR_LEN,
"%02x:%02x:%02x:%02x:%02x:%02x\n",
strv6[0], strv6[1],
strv6[2], strv6[3],
strv6[4], strv6[5]);
printf("copied MacAddress == %02x:%02x:%02x:%02x:%02x:%02x\n ",
shm_memory.mac_addr[0],
shm_memory.mac_addr[1],
shm_memory.mac_addr[2],
shm_memory.mac_addr[3],
shm_memory.mac_addr[4],
shm_memory.mac_addr[5]);
}
else
printf("\n empty string");
return 0;
}
解决方案
您的解析偏移量从 89 开始,要复制的字符数为 18。
#define PARSE_OFFSET 89 #define END_OFFESET 19
应该
#define PARSE_OFFSET 90 #define END_OFFESET 18
存储地址的 char 数组的长度应为 19。
unsigned char strv6[19];
您需要使用
sscanf
notsprintf
如下。sscanf(strv6, "%02x %02x %02X %02x %02x %02x\n", &shm_memory.mac_addr[0], &shm_memory.mac_addr[1], &shm_memory.mac_addr[2], &shm_memory.mac_addr[3], &shm_memory.mac_addr[4], &shm_memory.mac_addr[5]);
推荐阅读
- python-3.x - 我可以在 python 中使用变量从 Postgresql 中提取数据吗?
- node.js - 使用 axios、Node.js 连接到 Azure Blob 存储 REST API
- python - 找不到满足要求的版本 github-repo==2019.2.23 (来自 -r /tmp/build_ae8c4ea0_/requirements.txt () (来自版本:无)
- c# - 控制台应用程序 c# 中的平面文件格式
- java - 谷歌云运行 Java SDK
- c++ - 包含 SDL2/SDL_Image 时 SDL 包含错误
- python - 在网格中标记相邻单元面
- javascript - 如何检查按钮是否被单击,在其上放置一个值,然后使用innerHTML?
- javascript - Why href link is not adding to the html using jquery
- java - JavaFX:打开新窗格时返回 NullPointerException