在C语言中将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)

我想把一个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);
        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;
     }