Подумайте, самое простое решение - записать побайтово - с буферизацией это не имеет большого значения:
int pos = 0;
FILE *fp = 0;
//...
fp = fopen("somefile.txt", "w");
//...
while(buffer[pos])
if(buffer[pos] < 32 || buffer[pos] > 127) // change bounds for non-printable chars as you like
fprintf(fp, "%c", buffer[pos++]);
else
fprintf(fp, "\\%u", buffer[pos++]);
Edit:
Возможно, неправильно понял ваш вопрос. Используйте строковые функции только тогда, когда вы действительно работаете со строками. Для двоичных данных используйте двоичные функции (например, упомянутые memcpy()
).
Изменить 2/3:
Не печатайте значение как «% d» или «% u» - это должно быть «% 3o» для печати в виде 3-значного восьмеричного числа. Использование «% o» может быть небезопасно, если следуют другие цифры.