繁体   English   中英

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

[英]Converting a byte[] string back to byte[] array

我有一个这样的类场景。

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

看起来像以64为底。使用:

System.Convert.ToBase64String(b)

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

System.Convert.FromBase64String(s)

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

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

假设您已将文件作为字符串读取到ss中。

var bytes = Convert.FromBase64String(ss);

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

来自字符串的MemoryStream-关于使用编码的困惑

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM