File.WriteAllBytes不会将文件更改为二进制10101011

时间:2014-01-13 12:03:24

标签: c# io binary

我对File.WriteAllBytes函数有些困惑。

实际上我是使用

从图像文件中读取的
byte[] b =  System.IO.File.ReadAllBytes(textBox1.Text);

然后我将读取的数据写回文本文件以查看其外观。

System.IO.File.WriteAllBytes(@"D:\abc.txt", b);

但abc.txt的内容不是纯二进制(1010110),但它们显示为: -

ëžÕwN±K>“ùIRA= I¥Dh﬒ȪEJ:³0Æî(A÷«3ÚÉid¤n•O<‰ - ª@ - ¢)cùY³Ö~K“TûËEÇóþ} WTN + 2 =£V * NÌ!\äji;â€?çŠ'ö€¬ç#μ:+ŠVÜ“©³Û?çù~VèÖ·ŠËSŠE7RH8} GJGfT?Ý?çüÿœÌÊR”6ÓŠY¬Š¬L§|n¹>÷'Ã''D{D ®tvE!3 **Ý×õ¨(¨qžO§ùÿ>Ó¥¤... K€@ N {ñM(ÊÅ€ŒRtj/²Æ¤¶¹RÁŽxqþÏó@KŒînçš~æ0C/-Ž1Mu>oÊ}é5(Q ¢i±pIôÀôÿ?çÒÂB-á.ãï©Ú}êB®æÇÌyÿ?çüU¥mã$“ã ,DiFQ¸'μ,ARGLäc¯4%ËŸÃœsŸóù~H3d,zŠ‡Ø................................ ........

二进制1和0是否转换为包含如此多符号的其他数字系统?

2 个答案:

答案 0 :(得分:1)

文件中的每个字节由8位组成。当您使用ReadAllBytes时,您会得到一组byte个实例,其中每个byte代表0255之间的数字(包括)。人类可读的数字86的一个表示是01010110。但是,当您使用WriteAllBytes时,它会以原始格式写入字节序列。然后记事本加载文件并将每个字节显示为单个字符(或some encodings treating multiple bytes as a single character to display)。但是,如果您要将“01010110”写入文件以使记事本显示这些数字,您实际上最终会写入8个字节,而不是8个,就像这样,其中每组8位代表数字'0'或'1':

00110000 00110001 00110000 00110001 00110000 00110001 00110001 00110000

答案 1 :(得分:1)

像NotePad这样的文本查看器会尝试将字节解释为文本,可能会将字节解释为Unicode

如果你想看到实际的0和1,那么在图像中读取字节并将字节数组转换为0和1的字符串,为此你可以使用:

public static string ByteArrayToString(byte[] ba)
{
   string hex = BitConverter.ToString(ba);
   return hex.Replace("-","");
}

转换功能是从here(已接受的答案)复制的。请记住,这个字符串不再可以解释为图像,实际上这只是一个0和1的大字符串。