我正在将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);
这里有可能输出缓冲区数组的地址而不是其内容吗? C中是否有一个简单的方法可以完成这项任务,还是需要编写自己的子程序?
答案 0 :(得分: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]);
}
答案 1 :(得分:0)
这不是C的工作方式。如果有的话,您正在打印buffer
数组的地址。
您需要编写一个循环缓冲区中每个字节的子程序,并将其打印为十六进制。
如果你真的希望别人帮助你,我会建议你开始接受一些答案。
答案 2 :(得分:0)
要以十六进制显示字符,您只需要正确的格式控制器,并且需要循环缓冲区:
//where n is bytes back from the read:
printf("Here is the message(size %d): ", n);
for(int i = 0; i<n; i++)
printf("%x", buffer[i]);
您使用的代码是打印缓冲区的地址,这就是为什么它不会为您改变的原因。
由于您已经有一段时间了,如果您希望看到每个字节格式良好0xNN
,您还可以使用%#x
格式:
for(int i = 0; i<n; i++)
printf("%#x ", buffer[i]);
获得类似的内容:
0x10 0x4 0x44 0x52...