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

本文关键字:byte 数组 字符串 转换 | 更新日期: 2023-09-27 18:22:10

我有一个这样类的场景。

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

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

这看起来像基数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

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

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

var bytes = Convert.FromBase64String(ss);

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

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

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