【问题标题】:FormatException when converting Base64 string to bytes将 Base64 字符串转换为字节时出现 FormatException
【发布时间】:2012-09-02 00:47:43
【问题描述】:

尝试将 base64 字符串转换为字节数组时出现异常。我将图像转换为字节数组,然后转换为 base64 字符串,然后对其进行加密并将其存储在文件中。然后我尝试将 base64 字符串转换回 MemoryStream 中的字节数组,并重新创建图像。我在这里收到一个 FormatException:

byte[] imgBytes = Convert.FromBase64String(str);

以下是两个主要功能的完整代码:

public string ImageToString(Image img)
{
     using (MemoryStream ms = new MemoryStream())
     {
          img.Save(ms, ImageFormat.Jpeg);

          return Convert.ToBase64String(ms.ToArray());
     }
}

public Image StringToImage(String str)
{            
     int lent = str.Length;
     byte[] imgBytes = Convert.FromBase64String(str);
     MemoryStream ms = new MemoryStream(imgBytes, 0, imgBytes.Length);

     ms.Write(imgBytes, 0, imgBytes.Length);
     return Image.FromStream(ms, true);
}

这是我要转换的 base64 字符串的开头和结尾.... G>/9j/4AAQSkZJRgABAQEAYABgAAD .... Uh+8fxpT/B9KAP/2Q==

非常感谢任何想法!

【问题讨论】:

    标签: c# bytearray base64 formatexception


    【解决方案1】:

    问题是你的字符串在某处被损坏了。这不是 base64 字符串,正如您在第二个字符 > 中看到的那样,它不会出现在 base64 字符串中。


    旁注:您的函数创建一个包含数据的内存流,然后再次将数据写入内存流。然后你尝试从内存流中读取而不将位置重置为流的开头。

    只需创建内存流并从中读取:

    public Image StringToImage(String str) {            
      byte[] imgBytes = Convert.FromBase64String(str);
      return Image.FromStream(new MemoryStream(imgBytes), true);
    }
    

    【讨论】:

    • 啊,好吧,我明白了。我将 base64 字符串存储在我加密的 XML 样式文件中。在我提取 XML 标记之间数据的代码中,我没有正确指定起始位置。它正在提取所有正确的数据,包括起始标签的最后 2 个字符。在这种情况下,'G>'。感谢您的帮助!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-10-21
    • 1970-01-01
    • 2016-01-21
    • 1970-01-01
    • 2012-07-21
    • 2014-12-22
    • 1970-01-01
    相关资源
    最近更新 更多