如何将字节数组转换为字符串[重复]

Posted

技术标签:

【中文标题】如何将字节数组转换为字符串[重复]【英文标题】:How to convert byte array to string [duplicate] 【发布时间】:2012-07-24 04:04:34 【问题描述】:

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

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

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

【问题讨论】:

你已经有了字符串,所以你实际上不能这样做——你到底在做什么 @harold from a «value1/2» strings 我猜这只是一个例子。 OP 不接受假设 UTF-8 编码的答案,但确实接受了不同的答案,这表明假设 UTF-8 编码是不安全的。 你可以做new String(result) 【参考方案1】:

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

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

【讨论】:

您还应该使用编码类将字符串写入字节数组。 这实际上给出了一个有趣的结果,因为他用 BinaryWriter.Write(string) 重载编写了字符串,它首先保存了字符串的长度。 另外,重要的是要知道System.Text.Encoding.Default系统当前的ANSI 代码页 - 结果会因操作系统的配置方式而异。如果你知道字符串的真正编码是什么,你应该改用那个编码。 这是错误的。从问题中的代码来看,编码是UTF8,BinaryWriter的默认编码。 见***.com/questions/10611455/…【参考方案2】:

假设您使用的是 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);

【讨论】:

这个答案为读者节省了不可避免的谷歌搜索其他转换方向。 这个答案更准确,因为编码规范和另一侧转换。 System.Text.Encoding.UTF8.GetString(buffer, 0, buffer.Length);System.Text.Encoding.UTF8.GetString(buffer);相比有什么优点? @WouterVanherck 从reference source 来看,不多。 也为我工作BitConverter.ToString(byteArray))docs.microsoft.com/en-us/dotnet/api/…【参考方案3】:

您可以通过使用BlockCopy 来做到这一点,而无需处理编码:

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

【讨论】:

这对我不起作用。我在长度上遇到了错误(不分割给出了我需要的长度)。得到正确的长度后,我得到了一个 argumentException 试图构造字符串。 这仅适用于您的字符串使用 UTF16 编码的情况,即c# string's default internal encoding scheme。如果说,字节数组是简单地用原始字符串中的 ASCII 字符编码的(假设可以),在 BlockCopy 之后,每个字符都会被两个这样的 ASCII 字符压缩,这显然是错误的。 另一方面,如果您尝试创建损坏的字符串进行测试,这正是这样做的方法。谢谢! 如果你只想转换成字符串然后返回,我认为你不需要担心编码,见***.com/questions/472906/… 我认为如果您在bytes.Length / sizeof(char) 上使用Math.Ceiling,那么它将始终正常工作。【参考方案4】:

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

【讨论】:

以上是关于如何将字节数组转换为字符串[重复]的主要内容,如果未能解决你的问题,请参考以下文章

在java中将字符串数组元素转换为字节数组[重复]

将字符串转换为十六进制字节数组[重复]

在 C# 中有效地将字符串转换为字节数组(不使用编码)[重复]

如何将字节数组转换为流 [重复]

如何将字符串转换为十六进制字节数组? [复制]

字节数组到十六进制字符数组的转换[重复]