在C中保存为二进制文件,但它不显示零和1

Fir*_*rre 1 c binary fopen struct file

据我所知,通过使用wb模式在C中保存文件,我不应该在保存的文件中看到二进制数(零和一).

当我以wb模式保存时,文件中的输出是:

Feras Wilson - nFFFFîècc P xHFFû¥2012

但这不是二进制0和1.如何保存文件以包含零和1,然后能够在C中读取它?

cor*_*ump 7

它保存为0和1,但是文本编辑器将它们作为字节读取(它将它们分组为8位)并使用ASCII显示它们.[1]

当您写入文本文件时,需要付出很多努力来解释您希望编写的二进制数据,以便将其放入人类可读的格式中.

例如,如果你写的数字255,那就把它带到形式'2','5','5'(这是个字符!),然后写这些的每个字符.

如果它写入二进制文件,它只会在文件中放入实际的二进制数据.这取决于它是什么类型的变量(它代表它的多少个八位字节)以及endianess和其他东西.如果它是unsigned char,它将放入二进制文件0b11111111(这是实际的原始数字,而不是字符!).

[1] http://www.asciitable.com/


Chr*_*vic 5

这只是编辑器或命令对文件的文本表示.在内部所有文件都存储在HDD/SDD/RAM/...上的0和1 - 尝试使用十六进制编辑器打开文件bless(在Linux上易于使用,Windows需要Mono - 或者搜索您想要的另一个十六进制编辑器使用)来查看字节的存储方式.此外,我建议使用bless因为if提供不同格式的不同表示.

在您的代码中,您可以使用read方法按字节存储内容并解释它.如果您一次读取多个字节,请记住可能的字节顺序.那就是Little和Big Endian系统以"反向"顺序存储和读取字节.0x1337正在阅读的单词可能被理解为0x3713.只需熟悉这个术语,并在必要时使用维基百科了解如何处理此问题.