如何将字节数组转换为字符串[重复]
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);
【讨论】:
以上是关于如何将字节数组转换为字符串[重复]的主要内容,如果未能解决你的问题,请参考以下文章