如何在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 个字节。
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 个字节。