c - 在 C 中的数组中存储十六进制转储

标签 c arrays hexdump

我正在尝试使用 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 程序,在程序运行之前,将该文件的完整内容嵌入到我的程序的可执行代码中吗?”

原则上,是的,您可以将原始二进制文件转换为充满十六进制数字的文本文件,然后将其包含在源代码中。

很少这样做,而且比简单地在运行时加载程序更麻烦, 但有时人们在想要一个独立的可执行文件时会这样做:

附: 您的 PFS 文件是来自 Amiga、Playstation 还是其他设备?

关于c - 在 C 中的数组中存储十六进制转储,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20442064/

相关文章:

c - 如何在 C 中对每一列具有不同类型的二维数组进行排序?

c++ - 你如何在 c 中交换结构数组的元素?

Java - 合并两个数组而不重复(不允许使用库)

C:删除数组中的元素并使先前的指针起作用

javascript - 为什么所有表元素都被扔到第一个数组索引中?

c - 如何将内核中的数据写入二进制文件

c - 关于在泛型函数中进行转换的一些误解

无法从读取文件中获取准确的十六进制值

c - 如何创建一个特定大小的指针,然后让它指向内存中的特定地址

c - OpenGL/glut 背景多边形似乎与前景多边形重叠