2016-09-04 91 views
0

我是比较新的C.我有我想要打印到标准输出二进制缓冲区,就像这样:如何在C中打印二进制数据?

unsigned char buffer[1024]; 

有没有用printf输出这个到stdout的方法吗?我查看了printf的手册页,但没有提及unsigned char*,只有const char*%s

我想我可以循环缓冲区,并做putchar(buffer[i]),但我认为这将是相当低效。有没有办法使用printf来做到这一点?我是否应该使用类似fwrite的东西,那会更合适吗?

谢谢。

编辑:对不起,我不想将任何东西都转换为十六进制/二进制符号,只是按原样写出缓冲区。例如,如果我在缓冲区中有[0x41 0x42 0x42 0x41],那么我想打印“ABBA”。

+4

是,'fwrite'是要走的路。 – redneb

+1

您可以使用printf和“%x”以十六进制打印每个字符。 – Mick

+0

由于'%s'将在第一个NUL字符上终止,即使NUL在这些情况下经常是一个有效值,使用二进制字符串的'printf'可能会证明是错误的。 – Myst

回答

1

正如@redneb说,fwrite应该用于此:

#include <stdio.h> 

size_t size = sizeof(buffer); /* or however much you're planning to write */ 
fwrite(buffer, 1, size, stdout);