我正在尝试使用 C 语言创建 PFS 解压缩器。对于这个项目,我需要分析存档的十六进制转储,从中我将获得文件偏移量、名称和大小。
您认为将十六进制转储存储在 char 数组中是否是一种好习惯,并且我能够将十六进制转换为字符吗?
谢谢你,安德鲁·博格
“我可以将十六进制转换为字符吗?”
是的。在你的程序读入代表十六进制数字的文字字符后——例如,“5”和“A”,程序可以将其转换为十六进制值 0x5a,即十进制 90,然后将该值作为字符打印出来(打印为“Z”)。几乎所有其他可以想象的将字符转换为十六进制的方式,反之亦然,在 C 中非常容易。
如何在 C 中正确地将十六进制字符串转换为字节数组? 在十六进制数组中打印字符缓冲区 将字节数组转换为普通旧 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 程序,在程序运行之前,将该文件的完整内容嵌入到我的程序的可执行代码中吗?”
原则上,是的,您可以将原始二进制文件转换为充满十六进制数字的文本文件,您可以将其包含在源代码中。
很少这样做,而且比简单地在运行时加载程序更麻烦,但有时人们在需要一个独立的可执行文件时会这样做:
ps:您的 PFS 文件是来自 Amiga 还是 Playstation 或其他什么的?