【发布时间】:2020-07-26 23:40:17
【问题描述】:
我想把一串mac地址转换成十六进制格式。
- 输入:
char remote_device_mac[] = "00a05056a810";
- 预期输出:
uint8_t base_mac_addr[6] = {0x00,0xa0,0x50,0x56,0xa8,0x10};
我的代码:-
char dummy[2] = {0};
int j = 0;
uint8_t num = 0;
for(int k=0;k<6;k++)
{
for(int i=0;i<2;i++)
dummy[i] = remote_device_mac[i+j];
num = (int)strtol(dummy, NULL, 8);
j=j+2;
sprintf(base_mac_addr[k], "%x", num);
num = 0;
memset(dummy,0,2);
}
【问题讨论】:
-
您忘记了 NUL 字符串终止符。
dummy[2]->dummy[3](NUL 终止符需要空间)。 -
还要想想
strtol的参数中的8。提示:8 是错误的。 -
sprintf应该在这里做什么???你收到编译器警告了吗?将它们视为错误。 -
我将
dummy[2]更改为 [3] 并在strtol中将 8 更改为 16。在编译器中没有收到任何使用sprintf的警告,但此时我的代码崩溃了。我该如何改变这一点。它是一个嵌入式代码,使用MCU通过它的mac地址连接一个ble服务器。 -
你想用 sprintf 实现什么?而不是
sprintf,你想要的是:base_mac_add[k] = num),不是吗?仔细阅读sprintf的文档。