将byte []字符串转换回byte []数组

时间:2015-11-17 12:45:26

标签: c# binary-data

我有一个像这样的类的场景。

Class Document
{
    public string Name {get;set;}
    public byte[] Contents {get;set;}
}

现在我正在尝试实现导入导出功能,我将文档保存为二进制文件,因此文档将位于包含其他字段的json文件中,文档将采用此格式。

UEsDBBQABgAIAAAAIQCitGbRsgEAALEHAAATAAgCW0NvbnRlbnRfVHlwZXNdLnhtbCCiBAIooAACAAAAAAA==

现在,当我上传此文件时,我将此文件作为字符串获取并获得相同的数据,但当我尝试以二进制字节[]转换此文件时,文件已损坏。

我怎样才能做到这一点?

我使用这样的东西来转换

var ss = sr.ReadToEnd();

 MemoryStream stream = new MemoryStream();
 StreamWriter writer = new StreamWriter(stream);

 writer.Write(ss);
 writer.Flush();
 stream.Position = 0;  

 var bytes = default(byte[]);

 bytes = stream.ToArray();

3 个答案:

答案 0 :(得分:4)

这看起来像base 64.使用:

System.Convert.ToBase64String(b)

https://msdn.microsoft.com/en-us/library/dhx0d524%28v=vs.110%29.aspx

并且

System.Convert.FromBase64String(s)

https://msdn.microsoft.com/en-us/library/system.convert.frombase64string%28v=vs.110%29.aspx

答案 1 :(得分:3)

您需要从base64对其进行解码,如下所示:

假设您已将文件作为字符串读入ss

var bytes = Convert.FromBase64String(ss);

答案 2 :(得分:2)

这里有几件事情。您需要知道默认StreamWriter的编码,如果未指定,则默认为UTF-8编码。但是,.NET字符串始终为UNICODEUTF-16

MemoryStream from string - confusion about Encoding to use

我建议您使用System.Convert.ToBase64String(someByteArray)及其对应的System.Convert.FromBase64String(someString)为您处理此问题。