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

C# 如何将字节数组转换为字符串,c#,arrays,binaryreader,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); 我想

我创建了一个包含两个字符串的字节数组。如何将字节数组转换为字符串

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);

我想将
结果
转换为字符串。我可以使用
BinaryReader
,但不能使用
BinaryReader
(不支持)。

取决于您希望使用的编码:

var str = System.Text.Encoding.Default.GetString(result);

假设您正在使用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);

您可以使用以下方法来执行此操作,而无需处理编码:


要将字节[]转换为字符串[],只需使用下面的行

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);


您还应该使用encoding类将字符串写入字节数组。这实际上给出了一个有趣的结果,因为他使用BinaryWriter.write(string)重载编写字符串,它首先保存字符串的长度。另外,需要注意的是,
System.Text.Encoding.Default
是系统的当前ANSI代码页-其结果将根据操作系统的配置而有所不同。如果你知道字符串的真正编码是什么,你应该用这个来代替。这是错误的。从问题中的代码来看,编码是UTF8,BinaryWriter的默认值。请看,您已经有了字符串,所以您实际上不能完全这样做-您到底在做什么?@harold From a«value1/2»strings我想这只是一个示例。OP没有接受假定UTF-8编码的答案,但接受了不同的答案,建议假设UTF-8编码是不安全的。您可以只做
新字符串(结果)
这对我不起作用。我在长度上有一个错误(不除以给出我需要的长度)。在获得正确的长度后,我在尝试构造字符串时遇到了argumentException。这仅在字符串使用UTF16编码时有效,而UTF16是。比如说,如果字节数组仅使用原始字符串中的ASCII字符(假设可以)进行编码,则在区块复制之后,每个字符将被压缩为两个这样的ASCII字符,这显然是错误的。另一方面,如果您试图创建一个损坏的字符串进行测试,这正是正确的方法。谢谢如果你只想转换成字符串然后再转换回来,我认为你不必担心编码问题。我认为如果你在
bytes.Length/sizeof(char)
上使用
Math.Ceiling
,那么它将始终正常工作。这个答案可以避免读者不可避免地在谷歌上搜索其他转换方向。这个答案更准确,由于编码规范和另一方面的转换,
System.Text.encoding.UTF8.GetString(buffer,0,buffer.Length)有什么优点
System.Text.Encoding.UTF8.GetString(缓冲区)进行比较?@WouterVanherck根据代码判断,不多。
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);