C中的char *字符串的十六进制数

问题描述 投票:0回答:2

从此问题得到答案后:char* string to hex arrary in C

我写了一个函数:

u8 * mac_char_to_hex(char * mac){
    static u8 m[6]; 
    sscanf(mac, "%2x%2x%2x%2x%2x%2x", (int *)&m[0], (int *)&m[1], (int *)&m[2], (int *)&m[3], (int *)&m[4], (int *)&m[5]);
    return m;
}

工作正常,然后我想编写一个反向函数,看起来像:

char * mac_hex_to_char(u8 m[]) {
    static char * mac;
    sprintf((char *) mac, "%2x%2x%2x%2x%2x%2x", (int *)&m[0], (int *)&m[1], (int *)&m[2], (int *)&m[3], (int *)&m[4], (int *)&m[5]);
    printf("---------%s-------\r\n",mac);
    return mac;
}

那么怎么了?

c char hex
2个回答
1
投票

这是未定义的行为。您的变量mac未初始化。另外,您不想摆弄指针。改用它:

char * mac_hex_to_char(u8 m[]){

    static char mac[6*2 + 1];
    sprintf(mac, "%2x%2x%2x%2x%2x%2x", (int *)&m[0], (int *)&m[1], (int *)&m[2], (int *)&m[3], (int *)&m[4], (int *)&m[5]);
    printf("---------%s-------\r\n",mac);
    return mac;
}

0
投票

最后,在阅读@harper答案后,我得到了正确的功能。并做一些修改:

char * mac_hex_to_char(u8 m[]){
    static char  mac[6*2+1];
    sprintf(mac, "%2x%2x%2x%2x%2x%2x", m[0], m[1], m[2], m[3],m[4], m[5]);
    return mac;
}
© www.soinside.com 2019 - 2024. All rights reserved.