Как преобразовать 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;
}