Вы начинаете с 48-битного значения, но, вероятно, в вашей системе нет 48-битного целочисленного типа. Хотя, вероятно, существует 64-битный тип, и это может быть "long long".
Предполагая, что ваши 6 байтов упорядочены наиболее значимыми в первую очередь, и, понимая, что вам нужно заполнить два дополнительных байта на длинный, вы можете сделать что-то вроде:
long long myNumber;
char *ptr = (char *)&myNumber;
*ptr++ = 0; // pad the msb
*ptr++ = 0; // pad the 2nd msb
fread(ptr, 1, 6, fp);
Теперь у вас есть значение в myNumber