繁体   English   中英

如何在C中打印缓冲区的内容?

[英]How to print contents of buffer in C?

C新手在这里处理CS50的问题4,在其中您将获得一张存储卡来恢复50个jpeg文件。

我正在尝试一次读取512字节的原始数据,但是我想知道如何打印每个512字节块的内容?

在这种情况下,我使用fwrite方法似乎不打印任何内容:

fread(buffer, 512, 1, inptr);

fwrite(buffer, 1, 512, stdout);

其余代码:

#include <stdio.h>
#include <stdint.h>

int main(int argc, char *argv[])
{
    // Ensure only 1 command-line argument
    if (argc != 2)
    {
        fprintf(stderr, "Usage: ./recover infile");
        return 1;
    }

    // Remember filename
    char *infile = argv[1];


    // Open input file
    FILE *inptr = fopen(infile, "r");
    if (inptr == NULL)
    {
        fprintf(stderr, "Could not open %s.\n", infile);
        return 2;
    }

    // Create buffer to store 8 bits 512 times
    uint8_t buffer[512];

    fread(buffer, 512, 1, inptr);

    fwrite(buffer, 1, 512, stdout);

    // Close infile
    fclose(inptr);

    return 0;
}

JPEG文件包含二进制数据,因此您不能像打印字符串一样打印它。

您可能想要的是打印已读取的每个字节的十六进制值。 您可以按照以下步骤进行操作:

for (i=0; i<512; i++) {
    printf("%02x ", buffer[i]);
    if ((i+1)%16 == 0) printf("\n");
}

这将以十六进制打印每个字节,每行写入16个字节。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM