我正在使用程序和 C(使用 Ubuntu 及其 bash)并使用它来操作二进制数据文件。首先,当我使用fopen(filename, 'w')
它时会创建一个文件,但没有任何扩展名。但是,当我使用vim filename
它时,它会以某种二进制形式打开它。
对于这个问题,当我使用fwrite(array, sizeof(some struct), # of structs, filePointer)
它时(我不确定如何以二进制方式写入)到文件中。当我fread(anotherArray, sizeof(same struct), same # of structs, anotherFilePointer)
以某种方式使用它时,我神奇地知道如何以二进制形式读取每个结构,并通过知道它的大小和读取量将其放入数组中。如果我输入的十进制值小于# of structs
参数中的结构数,会发生什么?如何fread
知道正确阅读什么?仅通过查看大小而不知道它是什么类型的数据,它是如何读取数据的?
fwrite
将存储对象的内存字节写入输出流,fread
并将字节从输入流读取到其地址作为参数的内存中。没有对存储在该内存中的 C 对象的类型和表示做任何假设。
因此,可能会出现许多问题:
0A
字节0D
0A
在输出时转换为序列,而0D
在输入时字节将被剥离,从而导致0D
初始内容中孤立字节的内容不同。sizeof(T)
写入fwrite
或读取的字节中fread
。char
数组,例如包含 C 字符串的数组,请注意fwrite
将写入超出空终止符的字节,这些字节应该没有意义,但可能是敏感信息,例如密码片段或其他有意义的数据。仔细擦除这样的数组可以避免这个问题,但是填充字节不能被可靠地擦除,所以这个方案并不完美。由于上述所有原因和其他原因,读取/写入二进制数据将保留给程序员确切知道发生了什么的非常特定的情况。出于其他目的,最好以人类可读的形式保存为文本文件。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句