C#Encoding.Default.GetBytes()方法和整数表示

时间:2017-11-26 12:00:40

标签: c# encoding

我看到了这个代码示例:

using (FileStream fStream = File.Open(@"C:\myMessage.dat", FileMode.Create))
{
string msg = "Helloo";
byte[] msgAsByteArray = Encoding.Default.GetBytes(msg);

foreach (var a in msgAsByteArray)
{
    Console.WriteLine($"a: {a}");
}
// Write byte[] to file.
fStream.Write(msgAsByteArray, 0, msgAsByteArray.Length);

// Reset internal position of stream.
fStream.Position = 0;

// Read the types from file and display to console.
Console.Write("Your message as an array of bytes: ");
byte[] bytesFromFile = new byte[msgAsByteArray.Length];
for (int i = 0; i < msgAsByteArray.Length; i++)
{
    bytesFromFile[i] = (byte)fStream.ReadByte();
    Console.Write(bytesFromFile[i]);
}

// Display decoded messages.
Console.Write("\nDecoded Message: ");
Console.WriteLine(Encoding.Default.GetString(bytesFromFile));

Console.WriteLine($“a:{a}”)的结果是:

a: 72
a: 101
a: 108
a: 108
a: 111
a: 111

1。 我认为byte []由每个字节单元组成。 但是每个字节用整数表示。 该数字必须是相应的ASCII字符。 在C#中,字节数组表示以ASCII?

表示的数据

2。 文件myMessage.dat是由仅由0和1组成的二进制数据组成的吗? 但是当我用文本编辑器打开myMessage.dat时,它显示的是Helloo文本字符串。这是什么原因?

1 个答案:

答案 0 :(得分:2)

  1. 一个字节是一个8位整数,值为0到255.输出到控制台输出正常数字,提供一个格式字符串(https://docs.microsoft.com/en-us/dotnet/standard/base-types/standard-numeric-format-strings),您可以输出为十六进制。您可以使用此answer来获取二进制表示。
  2. 你明确转换了&#34; Halloo&#34;使用Encoding.Default.GetBytes()的字节数 - 有点像将其转换为ascii值,但注意系统上的默认编码。

    1. 您的texteditor会解释文件的数据并尽可能地显示它。如果你将一个byte[] myBytes = new [] {0,7,12,3,9,30}放入一个文件并用你的textedit打开,那么你将得到不可读的文本作为&#34;普通文本&#34;从32开始,之前是f.e.标签,铃铛,换行符和其他特殊的不可打印字符。见f.e. NonPrintableAscii