以十六进制数组打印char缓冲区

Pat*_*ick 5 c

我正在读取512个字符到一个缓冲区,并希望以十六进制显示它们.我尝试了以下方法,但它只是始终输出相同的值,尽管应该通过网络接收不同的值.

char buffer[512];
bzero(buffer, 512);
n = read(connection_fd,buffer,511);
if (n < 0) printf("ERROR reading from socket");
printf("Here is the message(%d): %x\n\n", sizeof(buffer), buffer);
Run Code Online (Sandbox Code Playgroud)

我可能在这里输出缓冲区数组的地址,而不是它的内容吗?C中是否有一个简单的方法可以执行此任务,还是需要编写自己的子例程?

Mar*_*ens 11

这将读取相同的512字节缓冲区,但在输出时将每个字符转换为十六进制:

char buffer[512];
bzero(buffer, 512);
n = read(connection_fd,buffer,511);
if (n < 0) printf("ERROR reading from socket");

printf("Here is the message:n\n");
for (int i = 0; i < n; i++)
{
    printf("%02X", buffer[i]);
}
Run Code Online (Sandbox Code Playgroud)

  • 您可能想要"%02X"而不是"%X",因为否则单位数值(即0-15十进制范围内的字节)将打印为单个数字. (2认同)