将 unicode 文件的包含内容复制到 c 中的 char 数组中

标签 c unicode fread

我编写了一个c代码,如下所示,用于复制文件。它确实适用于 unicode 文件(例如 exe、rar),我使用 char 数据类型数组来复制其中的文件“ block ”。我知道,char data-type 只能存储 1 字节作为扩展 ASCII 标准。

fread() 函数中,由于复制 的 block ,因此将 buffer[buflen] 变量用作 char 数组exe 文件(100 字节),然后将 buffer[buflen] 复制到另一个文件中。一 block unicode 字符怎么可能存储在 char 中?为什么这段代码适用于 unicode 文件确实没有任何问题?

copyFile 函数:

void copyFile(const char *src, const char *dst)
{
    const int buflen = 100;
    char buffer[buflen];
    long fileSize, curFileSize, offset = 0;
    FILE *r, *w;

    r = fopen(src, "r+b");
    w = fopen(dst, "w+b");

    fseek(r, 0, SEEK_END);
    fileSize = ftell(r);
    fseek(r, 0, SEEK_SET);

    while(fileSize - (curFileSize = ftell(r)) >= buflen)
    {
        fseek(r, offset * buflen, SEEK_SET);
        fread(&buffer, sizeof(buffer), 1, r);
        fwrite(&buffer, sizeof(buffer), 1, w);
        offset++;
    }

    if ((fileSize - curFileSize) != 0)
    {
        fseek(r, (offset - 1) + (curFileSize), SEEK_SET);
        fread(&buffer, fileSize - curFileSize, 1, r);
        fwrite(&buffer, fileSize - curFileSize, 1, w);
    }

    fclose(w);
    fclose(r);
}

入口点部分:

int main()
{
    copyFile("e:/1.exe", "e:/2.exe");
    return 0;
}

使用 char data-typestruct (包含 char)的原因是什么freadfwrite 函数?

感谢大家对我的帮助。

最佳答案

任何文件,无论编码如何,都只是一个字节序列。 char 类型可以存储任何字节,因此您只需逐字节复制文件即可。 (char 在 C 和 C++ 中用作字符类型和能够保存字节的数字类型。这可能会令人困惑,但两种用法都是有效的。)

freadfwrite 是根据 char 指定的,因为它们读取和写入字节。

关于将 unicode 文件的包含内容复制到 c 中的 char 数组中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37376608/

相关文章:

谁能把这个翻译成Python?

string - 如何从整数序列构造一个 String 实例?

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

c# - 如何转换文件名中的符号?

c - 读取二进制文件时得到太多零

c - fread 用垃圾填充缓冲区

c++ - 从 C 结构继承的可能的兼容性问题

在其他函数中使用 malloc 更改字符串

c - ISO 8583 c 库解压消息

linux - 当我使用特殊字符时,为什么 tr 给我双字符?