gpt4 book ai didi

c - 尝试将结构内容写入文件,但该文件具有随机编码

转载 作者:行者123 更新时间:2023-11-30 16:55:23 25 4
gpt4 key购买 nike

我正在尝试将结构的内容写入特定文件(由代码创建)。我有两个功能:

  • 一个函数将 struct X 内容写入文件 X;
  • 一个函数将 struct Y 内容写入文件 Y;

这些函数的代码基本相同,但第一个函数以 ANSI 编码(我想要的)编写,第二个函数以 UCS-2 编写(不是我想要的)为什么这个特定函数使用错误的编码编写?

函数X

    ponteiro = fopen("DB_dispositivo.dat", "ab+");

dispositivo.id = id;
dispositivo.numero_serie = nserie;
strcpy(dispositivo.marca, marca);
strcpy(dispositivo.modelo, modelo);
strcpy(dispositivo.tipo, tipo);
strcpy(dispositivo.sistema_operativo, os);
dispositivo.ano = ano;

fwrite(&dispositivo, sizeof(dispositivo), 1, ponteiro);

fclose(ponteiro);

函数 Y(“坏”函数)

ponteiro = fopen("DB_software.dat", "ab+");

software.id = id;
software.numero_serie = numero_serie;
strcpy(software.nome, nome);
strcpy(software.versao, versao);
software.tamanho = tamanho;
software.tipo_licenca = tipo_licenca;
strcpy(software.data_validade, data_validade);

fwrite(&software, sizeof(software), 1, ponteiro);

fclose(ponteiro);

任何帮助将不胜感激!!

编辑:

结构X

struct dispositivos{            
int id;
int numero_serie;
char marca[30];
char modelo[30];
char tipo[30];
char sistema_operativo[30];
int ano;
}dispositivo;

结构Y:

struct softwares{               
int id;
int numero_serie;
char nome[20];
char versao[20];
int tamanho;
int tipo_licenca;
char data_validade[11];
}software;

最佳答案

fwrite(3) 只是将 struct内存镜像写入为一系列字节。因此,数据将是字节的二进制序列,可能存在字段对齐间隙。不使用编码,而是使用 intchar[] 的内部编码。只有您在终端输入(未显示)时使用的编码才会用于输入到系统的字符串数据。并且 fread(3)fwrite(3) 函数中不进行任何编码转换。

此数据只能在同一台机器(或具有相同架构的机器)中使用 fread(3) 函数读回,因为数据格式完全取决于编译器存储的方式struct 内存中的内部数据。

不同的编译器、不同的编译器版本、不同的机器字节顺序(整数位编码为大于字节整数的顺序)可能会永远丢弃所有数据。

如果您存储数据以便与其他系统甚至不同编译器版本之间交换,我不推荐这种存储。

如果您观察到 char 数组具有不同编码的数据,最有可能的是数据已经采用不同的编码。带有 a 修饰符的 fwrite(3)(与表示二进制的 b 相反)仅在非 UNIX 环境中产生差异,例如 Windows 或ms-dos,其中 \n 字符被转换为 \r\n 序列,以符合操作系统对于文本文件行分隔符的约定。因此,永远不要fwrite(3)在文本模式下使用struct,因为它是二进制数据

关于c - 尝试将结构内容写入文件,但该文件具有随机编码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40320096/

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