在C语言中将mac地址字符串转换为十六进制
我想把一个mac地址字符串转换成十六进制格式在C语言中将mac地址字符串转换为十六进制,c,embedded,hex,esp32,C,Embedded,Hex,Esp32,我想把一个mac地址字符串转换成十六进制格式 输入: 预期产出: 我的代码:- 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)
- 输入:
- 预期产出:
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);
}
char-dummy[2]={0};
int j=0;
uint8_t num=0;
对于(int k=0;k
dummy
的大小至少有3个字节(2个字节表示六进制值,1个字节表示\0
)。因此可以声明为:
char dummy[3] = "00";
使用base=16而不是10,因为您希望转换为十六进制
num = strtol(dummy, &ptr, 16);
sprintf
不是必需的(如果要将数字复制到字符串中,请使用它)
最后,代码如下所示:
for(int k=0;k<6;k++)
{
for(int i=0;i<2;i++)
dummy[i] = remote_device_mac[i+j];
num = strtol(dummy, &ptr, 16);
j=j+2;
printf("0x%2x\n", num);
base_mac_addr[k] = num;
}
for(int k=0;kYou忘记了NUL字符串终止符。dummy[2]
->dummy[3]
(NUL终止符需要空间)在代码< Stotol < /代码>参数中考虑8个。提示:8是错误的。什么是<代码> SaveTFF <代码>应该在这里做??你得到编译器警告吗?把它们当作错误。我改变了<代码>哑[2 ] < /代码>到[ 3 ]。在strtol
中,我将8改为16。在编译器中使用sprintf
时没有收到任何警告,但我的代码在这一点上崩溃了。我如何更改这一点。这是一个嵌入式代码,使用MCU通过其mac地址连接ble服务器。你想用sprintf实现什么?你想要的不是sprintf
:base\u mac\u add[k]=num)
,你不是吗?仔细阅读sprintf
的文档。
char dummy[3] = "00";
num = strtol(dummy, &ptr, 16);
// assign each base_mac_addr to num.
base_mac_addr[k] = num;
for(int k=0;k<6;k++)
{
for(int i=0;i<2;i++)
dummy[i] = remote_device_mac[i+j];
num = strtol(dummy, &ptr, 16);
j=j+2;
printf("0x%2x\n", num);
base_mac_addr[k] = num;
}