如何获取文件的字节数
How to get the bytes of a file?
我知道的简单问题,我想做的是能够获取文件的字节数,以用于将这些字节添加到位数组中,然后我可以使用它写入名为bytes.exe
的文件并启动它。我知道如何在运行时读取现有文件的字节。但是我不知道如何在设计时获取文件的字节以复制并粘贴到我的bitarray[]
中。
目标是能够在运行时将bitarray[]
的片段写入myfile.exe
,然后启动该文件。基于许多不同的文件类型,我将使用许多bitarray[]'s
,所以我正在寻找一种简单的方法。
是否有应该使用的某种反编译器?我只是研究了资源脚本,但我不想将任何依赖项附加到我的主要.exe。
如果面向 Windows,最简单的方法是将myfile.exe
嵌入为资源,然后在运行时加载资源并创建一个文件并将资源的内容写入新文件。
如果无法使用资源,则需要创建一个源文件(.c 或 .h),该文件使用 myfile.exe
的内容初始化字节数组,并将其作为生成的一部分包含在内。 查看此答案以获取一种可能的方法:
https://stackoverflow.com/a/73653/333127
编辑:经过进一步审查,我认为我上面引用的链接中的源代码不适用于二进制输入文件。 这是我刚刚提出的一个快速替代方案:
#include <stdio.h>
#include <stdlib.h>
#define BYTES_PER_LINE 70
int main(int argc, char* argv[])
{
FILE* fp;
int ch;
int numBytes = 0;
if (argc < 2) {
printf("Usage: tobytes <file>n");
exit(1);
}
fp = fopen(argv[1], "rb");
if (fp == NULL) {
printf("Cannot open file %sn", argv[1]);
exit(1);
}
printf("char fileContents[] = {n");
while ((ch = fgetc(fp)) != EOF) {
if (numBytes > 0)
printf(",");
++numBytes;
if (numBytes % BYTES_PER_LINE == 0)
printf("n");
printf("0x%x", ch);
}
printf("n};n");
fclose(fp);
return 0;
}
100%清楚你想做什么,但为什么不写一个小程序来读取文件并将其转换为C数组。
也就是说,如果文件数据是:
01 02 03 04 (binary)
该程序将生成一个文件,该文件是:
char data[] = {0x01, 0x02, 0x03, 0x04};
然后运行此程序作为应用程序的预构建步骤(在 Makefile 或您正在使用的任何构建系统中),并将输出生成到源代码树中。
这样,数据将被编译到您的应用程序中,并且静态可用。
正如我所说,我不清楚这是否是您要解决的问题。
- C++数据文件、数组和计算赋值
- 如何将字节数组元素替换为修改的十六进制 ASCII 符号?
- 基于字节数组生成静态范围整数值
- 使用 stbi_write_png,如何将 0 和 1 的矩形字节数组转换为单色 png 文件?
- 用于 progmem 的C++和头文件压缩的 Web 文件字节数组
- Ascii .txt文件到字节数组 - C++
- 如何使用低级系统调用从 stdin 和输入文件中获取字节数
- 我应该如何将字节数组缓冲区传递给写文件
- 在写入二进制文件时,“std::ofstream::write”有时会写入超出应有字节数的字节
- 如何获取文件的字节数
- 我的字节数组到十六进制字符串转换器有什么问题,或者为什么它在写入文件时会在某个位置后剪切符号?
- 如何通过从文件中读取来反序列化C++的字节数组
- 如何通过读取C++中的文件来拆分字节数组
- C++:.bmp到文件中的字节数组
- 在写入二进制文件时,ofstream::write写入的字节数超过了应有的字节数
- 在C#中将字符串转换为字节数组,以在C++中的文件中写入字符串
- 在Matlab中编写一个固定长度的字节数组到二进制文件
- 从文件中读取字节数组的数据
- 快速拆分.或者如何使文件系统将字节数组识别为文件
- 来自文件的数据 - 发送的字节数与 fread() 不匹配