gpt4 book ai didi

在C中从二进制文件转换为十六进制

转载 作者:太空宇宙 更新时间:2023-11-04 04:03:20 25 4
gpt4 key购买 nike

我正在尝试编写一些简单的程序来将文件上传到我的服务器。我想将二进制文件转换为十六进制。我写了一些东西,但它不能正常工作。

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

static int bufferSize = 1024;
FILE *source;
FILE *dest;

int n;
int counter;

int main() {
unsigned char buffer[bufferSize];
source = fopen("server.pdf", "rb");
if (source) {
dest = fopen("file_test", "wb");

while (!feof(source)) {
n = fread(buffer, 1, bufferSize, source);
counter += n;
strtol(buffer, NULL, 2);
fwrite(buffer, 1, n, dest);
}
}
else {
printf("Error");
}
fclose(source);
fclose(dest);
}

我使用 strtol将二进制转换为十六进制。调用此代码后,我的 file_test 文件中仍然有奇怪的字符。

我想在服务器上上传文件,例如 PDF文件。但首先我必须编写一个程序,将此文件转换为十六进制文件。我希望十六进制文件中一行的长度等于 1024。之后,我将使用 PL/SQL 逐行上传此文件。 .

最佳答案

编辑: 我完全误解了 OP 的目标。正如我现在看到的,他想将他的 pdf 文件转换为十六进制表示形式,因为他想将该文件放在某个数据库表的文本 blob 字段中。我仍然声称这个练习完全是浪费时间,因为 blob 可以包含二进制数据:这就是发明 blob 的目的。 Blob 表示二进制大对象。

您说:“我想在服务器上上传文件,例如 pdf 文件。但首先我必须编写一个程序,将此文件转换为 hex 文件。”

您不必,而且绝不能编写任何此类转换程序。

您必须首先理解并内化十六进制表示法只是二进制的一种易于阅读的表示。如果您像您看起来那样认为必须将 pdf 文件“转换”为十六进制,那么您就错了。 pdf文件是二进制文件是二进制文件。您不会“转换”任何东西,除非您想更改二进制文件!

您必须放弃、删除、丢弃、防御、遗忘和消除您将任何二进制文件“转换”为其他任何文件的想法。请看,十六进制作为二进制的人类可读表示格式存在,每个十六进制数字代表四个连续的二进制数字。

换句话说:十六进制表示供人类使用,不适合(几乎总是)供程序使用。

例如:假设您的 pdf 文件包含一个四位字符串“1100”,其人类可读的十六进制表示可以是“C”。当您按照您想要的方式将 1100“转换”为十六进制时,您将其替换为 ASCII 字符“C”,其十进制值为 67。您可以立即看到它不是 你想做什么,你马上就会发现它甚至是不可能的:十进制值 67 需要七位,不适合你的四位“1100”。

HTH

关于在C中从二进制文件转换为十六进制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9292919/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com