我正在尝试使用C语言创建PFS解压缩器。对于这个项目,我需要分析Archive的Hex转储,我将从中获取文件偏移,名称和大小。
您认为将十六进制转储存储在char数组中是一种好习惯吗?我能将十六进制转换为字符吗?
谢谢你, 安德鲁博格
答案 0 :(得分:0)
“我可以将十六进制转换为字符吗?”
是。在程序读入代表十六进制数字的文字字符后 - 例如,'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数组(char [])一个好容器?“
是。当C程序将文本文件读入内存时,它们通常将该数据存储在char数组中。您不需要单独跟踪长度,因为ASCII文本文件从不包含零字节,因此正常的字符串结尾零字节正常工作。 您可能希望查看标准字符串库函数(strchr(),strstr()等)。
“我有这个PFS文件;我可以编写一个C程序,在程序运行之前,该文件的完整内容嵌入到我程序的可执行代码中吗?” < / p>
原则上,是的,您可以将原始二进制文件转换为一个文本文件,其中包含您可以包含在源代码中的十六进制数字。
这很少做,并且比在运行时简单加载程序更麻烦, 但偶尔人们会在他们想要一个独立的可执行文件时这样做:
P.S .: 您是来自Amiga或Playstation的PFS文件还是别的什么?