Как преобразовать MAC-адрес (в массиве) в строку в C?

как преобразовать MAC-адрес в int массив для строки в C? Например, я использую следующий массив для хранения MAC-адресов:

int array[6] = {0x00, 0x0d, 0x3f, 0xcd, 0x02, 0x5f};

как преобразовать это в строку, например "00:0d:3f:cd:02:5f"?

4 ответов


вы могли бы сделать это:

char macStr[18];
int array[6] = {0x00, 0x0d, 0x3f, 0xcd, 0x02, 0x5f};

snprintf(macStr, sizeof(macStr), "%02x:%02x:%02x:%02x:%02x:%02x",
         array[0], array[1], array[2], array[3], array[4], array[5]);

unsigned char array[6] = {0x00, 0x0d, 0x3f, 0xcd, 0x02, 0x5f};//or BYTE

char str[19];
sprintf(str, "%02x:%02x:%02x:%02x:%02x:%02x:%02x",array[0], 
        array[1], array[2], array[3], array[4],array[5]);

во-первых, вы, вероятно, хотите настроить тип, используемый для хранения MAC-адреса. Я думаю unsigned char лучше в данном случае. Затем я рекомендую вам создать функцию для записи MAC-адресов, чтобы вы не копировали и не вставляли одно и то же printf() оператор везде в вашем коде и настройка массива, который вы индексируете. (кроме того, он позволяет компилятору проверить тип, который вы используете, против параметра function, чтобы убедиться, что он правильный.)

вот и неповторной решение похожие на inet_ntoa(), и решение для повторного входа, подобное inet_ntoa_r():

#include <stdio.h>

unsigned char mac[6] = {0x00, 0x0d, 0x3f, 0xcd, 0x02, 0x5f};

char* MACADDR_toString(unsigned char* addr)
{
    static char str[18];

    if(addr == NULL) return "";

    snprintf(str, sizeof(str), "%02x:%02x:%02x:%02x:%02x:%02x", 
             addr[0], addr[1], addr[2], addr[3], addr[4], addr[5]);

    return str;
}

char* MACADDR_toString_r(unsigned char* addr, char* str, size_t size)
{
    if(addr == NULL || str == NULL || size < 18) return NULL;

    snprintf(str, size, "%02x:%02x:%02x:%02x:%02x:%02x", 
             addr[0], addr[1], addr[2], addr[3], addr[4], addr[5]);

    return str;
}

int main(int argc, char* argv[])
{
    char str[18];
    printf("%s\n", MACADDR_toString(mac));
    printf("%s\n", MACADDR_toString_r(mac, str, sizeof(str)));
    return 0;
}

вызов sprintf () в петлю ^_^:

#include <stdio.h>

int array[6] = {0x00, 0x0d, 0x3f, 0xcd, 0x02, 0x5f};

void macaddress_str(int a[], char *buf)
{
    int i;
    for (i = 0; i < 5; i++, buf += 3)
        sprintf(buf, "%02X:", a[i]);
    sprintf(buf, "%02X", a[i]);
}

int main()
{
    char buf[100];
    macaddress_str(array, buf);
    printf("%s\n", buf);
    return 0;
}