2012-09-18 36 views
1

正如我所理解的,通过使用wb模式保存C文件,我不应该在保存的文件(零和一)中看到二进制数字。保存为C文件的二进制文件,但不显示零和

当我保存白平衡模式的文件中的输出是:

Feras威尔逊 - N的FFFFîè`P c^XHF˚F û¥2012

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

回答

7

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

当您写入文本文件时,为解释您希望编写的二进制数据做了大量工作,以便将其置于人们可读的格式。

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

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

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

5

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

在您的代码中,您可以使用read方法按字节存储内容并解释此内容。如果您一次读取多个字节,请牢记可能的endianness问题。这就是Little和Big Endian系统以“反向”顺序存储和读取字节。正在读取的文字0x1337可能被读作0x3713。只要熟悉这个术语并且使用维基百科来理解如何处理这个问题,如果有必要的话。

3

所有文件都存储在二进制文件中!这只是一个连续的程序如何查看/解释这个二进制文件的问题。取决于你如何使用这个文件,它会被读取为表示字符的字节序列,或者表示指令的字节序列,或者表示Unicode等的字。

如果你想看到你的文件不同格式,使用od

NAME

od - dump files in octal and other formats 

这将转储文件以十六进制,字符,八进制等。(一件事也不会做的是告诉你在二进制,但是你可以得到你从八进制/十六进制输出很轻松了)