У вас немного проблем с порядком байтов. Ethernet с прямым порядком байтов, но ваш процессор с прямым порядком байтов.
К сожалению, нет встроенной функции для преобразования шести байтов, поэтому вы должны сделать это самостоятельно.
uint64_t test;
unsigned char convert[6];
fread(convert, 6, 1, ptr);
test =
((uint64_t)convert[0] << 40) |
((uint64_t)convert[1] << 32) |
((uint64_t)convert[2] << 24) |
((uint64_t)convert[3] << 16) |
((uint64_t)convert[4] << 8) |
((uint64_t)convert[5]);
Кто-то может найти более быстрый битбэш, но вам, вероятно, все равно.
В качестве альтернативы (в зависимости от того, что вы делаете) вы можете просто напечатать его в нужном вам порядке:
unsigned char convert[6];
fread(convert, 6, 1, ptr);
//...
printf("%02X:%02X:%02X:%02X:%02X:%02X\n", convert[0], convert[1], convert[2], convert[3], convert[4], convert[5]);
Я позволил себе вставить на этот раз ожидаемые: разделители в MAC-адресах.