我要问一个问题,也许是新手。我正在使用Cfwrite
中的函数将数据写入文本文件,但是当我打开文件时,数字不是读取而是一系列符号,当我使用二进制文件进行写入或读取时没有问题(因为我没有在编辑器文本中打开它们),但如果我使用文本文件,在写入数据或. 我的示例代码:double
int
double
#include <stdio.h>
int main ( int argc, char **argv )
{
FILE *fp;
unsigned int dinero[10] = { 23, 12, 45, 345, 512, 345, 654, 287,
567, 124 };
fp = fopen ( "fichero.txt", "w" );
fwrite( &dinero[0], sizeof(unsigned int), 10, fp );
fclose ( fp );
return 0;
}
网上所有的代码示例都是这样的。如果该函数仅用于二进制文件,我在任何地方都找不到信息。
从已经非常感谢了。
好吧,我会告诉一些我所看到的。只是为了贡献一些东西。当我使用 gedit 编辑器打开文件并仅键入文本时,文本可以正常读取。如果我输入文本和数字,无论是 int、float 还是 double,都会读取文本,但不是数字,而是混乱的符号(显然)。如果我用 sublime 文本编辑器打开它并且文件包含文本和数字,我看到的是以下内容:
4d6f 7374 7261 6e64 6f20 656c 2075 736f 2064 6520 6677 7269 7465 2065 6e20 756e 2066 6963 6865 726f 2e0a 0100 0000
据我所知,它是文本的ascii代码加上数字。如果文件只包含文本,则正常读取文本。如果文件只包含数字,崇高的文本会显示以下内容:
0100 0000
输入一个数字,即 1。输入的数据类型是无符号整数。我想办法让它成为二进制或其他东西,但没有。如果它是双倍的文件有别的东西。好吧,我真的是绕圈子,我的意图是贡献一些东西,但它可能根本没有帮助。我的问题本身是因为如果我使用 fwrite 函数,我看不到写入文本文件的数字。好吧,我的结论是文本可以写在 txt 文件中,但数字必须写在二进制文件中。0100 0000 是十六进制的 1。整数占用 4 个字节,每个字节有两个数字。我可以使用该函数进行写入,当我使用 fread 从文件中读取它时,我将它保存在一个数组中以处理数字。剩下的只是好奇为什么我在输入数字时无法正确看到文本文件。
您可以使用与 printf 类似的 fprintf 函数,不同之处在于输出是在您作为第一个参数传递的文件中进行的,例如:
这是值得期待的。
fwrite
它是一个二进制写入实用程序,也就是说,它不以任何方式处理要保存的数据。如果您
fwrite
在示例中使用 with:将保存在文件中的是 的二进制表示
dinero[0]
,即 23。因此,文件中将保存以下十六进制序列:如果您尝试以文本模式打开此文件,您将有 7 个空字符和最后一个保留字符,其含义是End of transaction block。我的意思是……没有什么可读的。
要检索以二进制形式存储的信息,您必须求助于以
fread
二进制形式读取数据......因此,当将前一个序列存储在与 type 变量关联的内存中时,您的应用程序将理解原始unsigned int
数字在所说的变量23
。为了使文件数据可以被人类读取, 有必要以文本格式保存它们,这意味着对数据进行某种处理……您无法保存其二进制表示,但您必须使用可读的表示。 .. 一种解决方案是将数字转换为文本,您可以使用它,正如@DarielRamosDiazVillegas告诉您的那样,
fprintf