C# – 读取字节,它们是什么以及发生了什么。 我希望二进制值,而不是十进制数

我已经做了几年的程序员,但我从来没有理解涉及字节的低级操作。 然而,它让我感兴趣,我想更多地了解使用字节。

在下面的代码中,我正在阅读一个只包含单词“hi there”的文本文件。

FileStream fileStream = new FileStream(@"C:\myfile.txt", FileMode.Open); byte[] mybyte = new byte[fileStream.Length]; fileStream.Read(mybyte, 0, (int)fileStream.Length); foreach(byte b in mybyte) Console.Write(b); Console.ReadLine(); 

在这种情况下,mybyte变量包含似乎表示ASCII十进制对应项的数值。 但是,我通过字节表示位,这反过来又代表二进制值。 当读取一个字节时,我希望看到像’0001010’这样的二进制值,而不是’104’,这是’h’的ascii字符。

在读取图像的情况下,当将图像读入字节数组时,我再次看到数组中的数字,并且从低级别的persepctive我会期望二进制值。 我知道这些数字显然没有映射到Ascii,但是我很困惑为什么当读取字符串时它们会映射到ascii数字并且在读取图像流时它会做其他事情(我实际上不确定数字代表什么在阅读图像的情况下)。

我知道理解数字在字节数组中的含义并不重要,但它让我非常感兴趣。

当从文本文件中读取和读取二进制文件(即图像)时,是否有人可以了解.net框架中的字节。 谢谢

此图像是保存从myfile.txt读取的文本“hi there”的字节数组 myfile.txt文件的字节数组。值映射到“hi there” 该图像是保持图像流的字节数组 在此处输入图像描述

01101000是值104的8位表示。由于ac#byte存储8位(0-255),因此它显示为更可读的东西。 打开Windows计算器并将视图更改为“Programmer”,然后将其设置为“Bin”。 可能会稍微清理一下。

它没有向您显示十进制数字,它向您显示ac#byte,一个0到255之间的数字

字节实际上是一个8位整数,在那里表示为0到255之间的整数 – 换句话说,用十进制表示法。 你期望它以二进制表示法表示,但它实际上意味着同样的事情。 我可以说最好的是,在这种情况下,Visual Studio如何代表它,但可能会有更多细节可供人们使用。

图像文件只是一组连续的字节,同样在这里都表示为十进制数字。

希望有所帮助。

一个字节由8位组成。 这些可以以不同的方式写入,例如作为十进制值(104),作为二进制值(1101000)或作为十进制值(68)。 它们都意味着完全相同,它只是值的不同表示。

这与ASCII字符无关。 它们恰好也是一个字节长(确切地说是7位)。

当然,低级别的所有内容都将存储为二进制值的集合。 您在调试器中看到的是它的十进制表示。 因为二进制值并不意味着什么,除非我们解释它们,在两种情况下(字符串和图像)使用调试器看到的十进制数相同。

例如,当您从文件流中读取一个字节,然后使用以下编码解析它:

 FileStream fs = new FileStream(@"", FileMode.Open, FileAccess.Read, FileShare.Read); byte[] bt = new byte[8]; fs.Read(bt , 0, 1); string str = System.Text.ASCIIEncoding.ASCII.GetString(bt); 

即使您从图像文件中读取,也会得到ASCII字符。 如果您将相同的图像文件流传递给Image类

 Bitmap bmp = (Bitmap)Image.FromFile(@""); 

并将此bmp指定给图片框,您将看到一个图像。

简介:您的口译员给出了0和1或十进制数的含义。 他们自己并不意味着什么。