gpt4 book ai didi

无法在 GNU/Linux 中读取二进制视频文件

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:54:28 26 4
gpt4 key购买 nike

我被一段看似无害的代码困住了。我正在尝试将整个 flv 视频文件读入 uint8_t 数组,但没有理由只读取了前 10 个字节。

contents = malloc(size + 1);

if (read(fd, contents, size) < 0)
{
free(contents);
log_message(WARNING, __func__, EMSG_READFILE);
return (NULL);
}

我也尝试过使用 fopen 和“rb”,但 Glibc 似乎忽略了额外的“b”或其他东西。有什么线索吗?

提前致谢。

编辑:也许它读取一个 EOF 字符?

附言。 'size' 是一个包含使用 stat() 的实际文件大小的变量。

最佳答案

原始代码似乎正确读取了全部内容。

问题似乎在于使用该二进制数据 - 将其打印出来会在第一个 null 处被截断,看起来只有 10 个字节存在。您不能使用任何用于字符串或字符数组的方法来输出二进制数据,因为它们会在第一个空字节处截断,使数组看起来比实际长度要短。

查看与查看十六进制数据相关的其他一些问题: how do I print an unsigned char as hex in c++ using ostream? Converting binary data to printable hex

如果你想把它附加到一个字符串中——用什么格式?十六进制? base64?原始字节不起作用。

这是我发布的原始代码。一些小的改进,加上一些更好的诊断代码:

int ret, size = 4096; /* Probably needs to be much bigger */
uint8_t *contents;
contents = malloc(size + 1);

if(contents == NULL)
{
log_message(WARNING, __func__, EMSG_MEMORY);
return (NULL);
}

ret = read(fd, contents, size);
if(ret < 0)
{
/* Error reading file */
free(contents);
log_message(WARNING, __func__, EMSG_READFILE);
return (NULL);
}

for(i = 0;i < ret;++i)
{
printf("%c", contents[i]);
/* printf("%0.2X", (char) contents[i]); /* Alternatively, print in hex */
}

现在,ret 真的是 10 吗?还是当您尝试打印输出时只得到 10 个字节?

关于无法在 GNU/Linux 中读取二进制视频文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1526455/

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