【发布时间】:2016-01-25 19:38:54
【问题描述】:
试图将一个巨大的十六进制字符串转换为二进制字符串,但一直抛出 OverflowException。这是我将图像文件转换为十六进制字符串的代码(与 FlowDocument 一起使用时效果很好!):
string h = new System.Runtime.Remoting.Metadata.W3cXsd2001.SoapHexBinary(System.IO.File.ReadAllBytes(Path)).ToString();
但是,现在我想获取这个十六进制字符串并将其转换为二进制字符串,以便它也可以显示在 FlowDocument 中。首先,我尝试将其写入临时文本文件,然后尝试将其读入字节数组:
string TempPath = System.IO.Path.Combine(System.IO.Path.GetTempPath(), "Text.txt");
using (System.IO.StreamWriter sw = new System.IO.StreamWriter(TempPath))
{
sw.WriteLine(Convert.ToString(Convert.ToInt64(h, 16), 2).PadLeft(12, '0'));
}
byte[] c = System.IO.File.ReadAllBytes(TempPath);
当这不起作用时,我尝试将其读入字符串:
string c = System.IO.File.ReadAll(TempPath);
两者都不起作用,仍然抛出 OverflowException。我也尝试过这样做并完全跳过写入文件:
string s = Convert.ToString(Convert.ToInt64(h, 16), 2).PadLeft(12, '0')
不管我采取什么方法,我仍然会抛出异常。像这样的大字符串通常是如何处理的?
更新
我修改了我的算法,一次转换一个字符,所以现在看起来像这样:
string NewBinary = "";
try
{
int i = 0;
foreach (char c in h)
{
if (i == 100) break;
NewBinary = string.Concat(NewBinary, Convert.ToString(Convert.ToInt64(c.ToString(), 16), 2).PadLeft(12, '0'));
i++;
}
}
这样做的问题是字符串总是很长,上面的代码需要很长时间才能生成二进制字符串。我将长度限制为 100 以测试转换,因此转换本身不是问题。
【问题讨论】: