如何将字节数组转换为字符串

Oks*_*ana 648 c# arrays binaryreader

我用两个字符串创建了一个字节数组.如何将字节数组转换为字符串?

var binWriter = new BinaryWriter(new MemoryStream());
binWriter.Write("value1");
binWriter.Write("value2");
binWriter.Seek(0, SeekOrigin.Begin);

byte[] result = reader.ReadBytes((int)binWriter.BaseStream.Length);
Run Code Online (Sandbox Code Playgroud)

我想转换result为字符串.我可以用它做BinaryReader.但我不能使用BinaryReader(它不支持).

eul*_*rfx 1055

根据您要使用的编码:

var str = System.Text.Encoding.Default.GetString(result);
Run Code Online (Sandbox Code Playgroud)

  • 您还应该使用编码类将字符串写入字节数组. (23认同)
  • 另外重要的是要注意`System.Text.Encoding.Default`是*系统当前的ANSI代码页* - 其结果将根据操作系统的配置方式而有所不同.如果你知道字符串的编码是什么,你应该使用那个. (8认同)
  • 这实际上给出了一个有趣的结果,因为他用BinaryWriter.Write(string)重载编写了字符串,它首先保存了字符串的长度. (6认同)
  • 这是错的.从问题中的代码,编码是UTF8,BinaryWriter的默认值. (3认同)

And*_*708 246

假设您使用的是UTF-8编码:

string convert = "This is the string to be converted";

// From string to byte array
byte[] buffer = System.Text.Encoding.UTF8.GetBytes(convert);

// From byte array to string
string s = System.Text.Encoding.UTF8.GetString(buffer, 0, buffer.Length);
Run Code Online (Sandbox Code Playgroud)

  • 这个答案为读者节省了不可避免的谷歌搜索其他转换方向. (9认同)
  • 也为我工作 `BitConverter.ToString(byteArray))` https://learn.microsoft.com/en-us/dotnet/api/system.bitconverter.tostring?view=net-5.0 (3认同)
  • 由于编码规范和另一侧转换,此答案更准确。 (2认同)
  • 与System.Text.Encoding.UTF8.GetString(buffer);相比,System.Text.Encoding.UTF8.GetString(buffer,0,buffer.Length);有什么优点? (2认同)
  • @WouterVanherck 从[参考来源](https://referencesource.microsoft.com/#mscorlib/system/text/encoding.cs,1483) 来看,不多。 (2认同)

Hfo*_*ham 28

您可以在不使用BlockCopy处理编码的情况下执行此操作:

char[] chars = new char[bytes.Length / sizeof(char)];
System.Buffer.BlockCopy(bytes, 0, chars, 0, bytes.Length);
string str = new string(chars);
Run Code Online (Sandbox Code Playgroud)

  • 另一方面,如果您正在尝试创建一个损坏的字符串进行测试,这正是这样做的方法.谢谢! (8认同)
  • 我认为如果您在`bytes.Length / sizeof(char)`上使用`Math.Ceiling`,那么它将始终正常工作。 (2认同)

小智 8

要将byte []转换为string [],只需使用以下行.

byte[] fileData; // Some byte array
//Convert byte[] to string[]
var table = (Encoding.Default.GetString(
                 fileData, 
                 0, 
                 fileData.Length - 1)).Split(new string[] { "\r\n", "\r", "\n" },
                                             StringSplitOptions.None);
Run Code Online (Sandbox Code Playgroud)