Предполагая, что вы планируете читать его обратно в ту же программу на той же архитектуре (без проблем с порядком байтов), просто напишите число напрямую:
fwrite(&a, sizeof(a), 1, f);
или скопируйте его с помощью memcpy в промежуточный буфер:
memcpy(bufp, &a, sizeof(a));
bufp += sizeof(a);
Если вам приходится иметь дело с проблемами порядка байтов, вы можете быть хитрым. Примените float к long и используйте htonl:
assert(sizeof(float) == sizeof(long)); // Just to be sure
long n = htonl(*(long*)&a);
memcpy(bufp, &n, sizeof(n));
bufp += sizeof(n);
Чтение обратно в:
assert(sizeof(float) == sizeof(long)); // Just to be sure
long n;
memcpy(&n, bufp, sizeof(n));
n = ntohl(n);
a = *(float*)n;
bufp += sizeof(n);