【发布时间】:2013-11-23 14:36:25
【问题描述】:
我正在尝试将byte 数组转换为字符串,我只需将byteArray 中的数字转换为字符串Foreg。 "12459865..."
我正在尝试这样做:
fileInString = Encoding.UTF8.GetString(fileInBytes, 0, fileInBytes.Length);
fileInBytes 看起来像这样:1212549878563212450045....
但结果 fileInString 看起来像这样 ID3\0\0\0\0JTENC\0\0\0@\0\0WXXX\0... 和很多奇怪的字符。
我尝试了不同的编码风格,包括default,但都在其中插入了一些奇怪的字符。
我唯一的选择是将每个成员循环并转换为字符串
while (currbyte != -1)
{
currbyte = fileStream.ReadByte();
//fileInBytes[i++] = (byte)currbyte;
fileInString += currbyte.ToString();
progressBar1.Value = i++;
}
但这是TOO 慢。请告诉我如何使用Encoding.....GetString将字节数组转换为字符串
【问题讨论】:
-
你如何得到像这样
1212549878563212450045的字节?你能把它分成每个字节吗?例如 12|12|54|98 ... 或 1|2||1|2|5|4|9|8...? -
我已经更新了我的问题,以解释我是如何将
fileInBytes数组制作成基本上像这里fileInBytes[i++] = (byte)currbyte;一样的数组 -
它很慢可能部分是因为你的
progressBar1.Value = i++;,任何更新UI相关的代码都会减慢一切,你应该在更大的时间间隔内更新进度条以减少这种情况,甚至在某些情况下我们不会甚至不需要有关当前进程的任何确切信息,只需一些工作通知就足够了。 -
接受 Tim S. 的答案,但 fileInString += 很慢,因为字符串是不可变的。如果你沿着这条路走,应该使用 StringBuilder。为什么你会有一个只需要几分之一秒的操作的进度条?