Я думаю, что вы делаете это просто отлично, memcpy()
атрибуты просто отлично, malloc()
правильно. Вы можете использовать встроенную функцию , например, для выделения памяти / проверки выделения (вы должны проверять каждое выделение):
inline void* s_malloc(size_t size){
void *ptr = malloc( size);
if( !ptr){
printf( "Allocation failed");
exit(1);
}
return ptr;
}
Вы также можете написать макрос для этого, но, вероятно, вы не сможете использовать его как функцию. Если у вас, ребята, есть лучший способ сделать это, я буду рад расширить / отредактировать.
В любом случае, чтобы ответить на ваш вопрос. Как вывести MAC-адрес. Вот руководство для prinf()
, посмотрите на x
соотв. X
формат. Выводится десятичное число.
Он прекрасно работает, пока вы не захотите напечатать однозначное длинное число. Итак, давайте скажем printf()
напечатать число с точностью до 2 чисел .2
. И мы также должны сказать ему, что это должен быть «левый» блок вместо «десятичных дробных разрядов на правой стороне», то есть -
(проверьте все вручную). Итак, полная строка для печати одного байта MAC: %-.2X
. Полный пример будет:
#include <stdio.h>
int main(){
unsigned char data[6] = {0x00, 0xab, 0x03, 0xff, 0xba, 0x10};
printf( "%-.2X:%-.2X:%-.2X:%-.2X:%-.2X:%-.2X\n", data[0], data[1], data[2],
data[3], data[4], data[5]);
return 0;
}
И результат:
[vyktor@grepfruit tmp]$ gcc -Wall src.cpp && ./a.out
00:AB:03:FF:BA:10
Чтобы ускорить процесс, вы можете создать такую функцию:
void print_mac( const unsigned char *data){
printf( "%-.2X:%-.2X:%-.2X:%-.2X:%-.2X:%-.2X\n", data[0], data[1], data[2],
data[3], data[4], data[5]);
}
// Usage example:
printf( "SrcMAC: ");
print_mac(packet+6);
printf( "DstMAC: ");
print_mac(packet);
Конечно, может быть лучший способ сделать это. Я попытался сделать это понятным и познавательным, если вы ничего не понимаете, пожалуйста, не стесняйтесь спрашивать в комментарии