gpt4 book ai didi

C : Reading bytes from binary file

转载 作者:太空宇宙 更新时间:2023-11-03 23:44:50 24 4
gpt4 key购买 nike

我目前正在尝试从一个二进制文件中读取 256 个字节,但在运行我的程序时没有得到任何输出(或错误)。我有点困惑我在哪里出错了。尝试将每个 byte 读取为 char 并存储为长度为 256 的 char 数组。我已经在 SO 上审查过类似的问题,但到目前为止还没有运气。下面是我的代码的简化版本:

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[]){
FILE *binary = fopen(argv[1], "rb");
char bytesFromBinary[256];

fread(&bytesFromBinary, 1, 256, binary);
printf("%s", bytesFromBinary);
return 0;
}

最佳答案

fread 的基本用法是根据预期的字节数检查返回值,以验证您阅读了您打算阅读的内容。保存返回值还允许您处理部分读取。

下面的最小示例一次从作为第一个参数给定的文件(如果没有给定文件,则默认为 stdin)读取 16 个字节到 buf 中,并且然后将每个值以十六进制格式输出到 stdout

#include <stdio.h>

#define BUFSZ 16

int main (int argc, char **argv) {

unsigned char buf[BUFSZ] = {0};
size_t bytes = 0, i, readsz = sizeof buf;
FILE *fp = argc > 1 ? fopen (argv[1], "rb") : stdin;

if (!fp) {
fprintf (stderr, "error: file open failed '%s'.\n", argv[1]);
return 1;
}

/* read/output BUFSZ bytes at a time */
while ((bytes = fread (buf, sizeof *buf, readsz, fp)) == readsz) {
for (i = 0; i < readsz; i++)
printf (" 0x%02x", buf[i]);
putchar ('\n');
}
for (i = 0; i < bytes; i++) /* output final partial buf */
printf (" 0x%02x", buf[i]);
putchar ('\n');

if (fp != stdin)
fclose (fp);

return 0;
}

(注意:bytes == readsz仅当freadsize参数为1时。返回是读取的 items 的数量,对于 char 类型的值,每个 item 只等于 1)

示例使用/输出

$ echo "A quick brown fox jumps over the lazy dog" | ./bin/fread_write_hex
0x41 0x20 0x71 0x75 0x69 0x63 0x6b 0x20 0x62 0x72 0x6f 0x77 0x6e 0x20 0x66 0x6f
0x78 0x20 0x6a 0x75 0x6d 0x70 0x73 0x20 0x6f 0x76 0x65 0x72 0x20 0x74 0x68 0x65
0x20 0x6c 0x61 0x7a 0x79 0x20 0x64 0x6f 0x67 0x0a

查看示例,如果您有任何问题,请告诉我。

关于C : Reading bytes from binary file,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36393223/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com