我正在尝试使用 C 语言创建一个 PFS 解压缩器。对于这个项目,我需要分析存档的十六进制转储,从中获取文件偏移量、名称和大小。
您认为将十六进制转储存储在字符数组中是一种好的做法吗?我能够将十六进制转换为字符吗?
谢谢你, 安德鲁·博格
最佳答案
“我可以将十六进制转换为字符吗?”
是的。在程序读取代表十六进制数字的文字字符(例如“5”和“A”)后,程序可以将其转换为十六进制值 0x5a(十进制 90),然后将该值作为字符打印出来(打印为“Z”)。 几乎所有其他可以想到的将字符转换为十六进制的方法,反之亦然,在 C 中都很容易。
How to correctly convert a Hex String to Byte Array in C? Printing char buffer in hex array Convert array of bytes to hexadecimal string in plain old C
我不清楚您在其余问题中要问什么。 你问的是:
“我有这个二进制 PFS 文件;我可以编写一个 C 程序,当程序运行时,将该文件读入 RAM,如果是这样,那么 char 数组 (char[]) 是一个很好的容器?”
是的。当 C 程序将原始二进制文件数据读入内存时,它们通常将该数据存储到 char 数组中,并且它们单独跟踪长度(因为与表示 C 字符串的 char 数组不同,您的二进制数据可能偶尔会有零字节)。 您可能想查看标准内存库函数( memcmp() 、 memchr() 等)
“我有一个 ASCII 文本文件,它是 PFS 文件的十六进制转储;我可以编写一个 C 程序,当程序运行时,将该 ASCII 文本文件读取到 RAM 中吗?如果是,则为字符数组 (char[]) 是一个好的容器吗?”
是的。当 C 程序将文本文件读入内存时,它们通常将该数据存储在 char 数组中。您不需要单独跟踪长度,因为 ASCII 文本文件从不包含零字节,因此正常的字符串结尾零字节可以正常工作。 您可能想查看标准字符串库函数( strchr() 、 strstr() 等)。
“我有这个 PFS 文件;我可以编写一个 C 程序,在程序运行之前,将该文件的完整内容嵌入到我的程序的可执行代码中吗?”
原则上,是的,您可以将原始二进制文件转换为充满十六进制数字的文本文件,然后将其包含在源代码中。
很少这样做,而且比简单地在运行时加载程序更麻烦, 但有时人们在想要一个独立的可执行文件时会这样做:
- How to embed a file into an executable?
- https://gist.github.com/valenok/4714740
- http://www.daniweb.com/software-development/c/threads/352381/how-to-define-hex-character-array-in-c
- http://www.massmind.org/techref/datafile/charset/extractor/charset_extractor.htm
- How to embed a file into an executable file?
- Embedding resources in executable using GCC
- http://www.linuxjournal.com/content/embedding-file-executable-aka-hello-world-version-5967
附: 您的 PFS 文件是来自 Amiga、Playstation 还是其他设备?
关于c - 在 C 中的数组中存储十六进制转储,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20442064/