我正在尝试将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
答案 0 :(得分:1)
如果您想将byte[]
编码为string
,base64 encoding ToBase64String
FromBase64String
和{{3}}方法的{{3}}是好的这样做的方法:
Convert
使用string fileInString = Convert.ToBase64String(fileInBytes);
byte[] asBytesAgain = Convert.FromBase64String(fileInString);
进行编码似乎是一个模糊的基数10编码。例如。根据我的判断,值fileInString += currbyte.ToString();
和{ 1, 10, 255 }
的数组编码相同:{ 110, 255 }
,因此无法明确地更改回"110255"
。
答案 1 :(得分:0)
没有可以达到你想要的编码。
您需要像处理一样遍历字节。
为了加快速度,请使用StringBuilder
并且不要经常更新ProgressBar:
var builder = new StringBuilder();
for (var i = 0; i < fileStream.Length; i++)
{
builder.Append(fileStream.ReadByte().ToString());
if (i % 1000 == 0) //update the ProgressBar every 1000 bytes for example
{
progressBar.Value = i;
}
}
var result = builder.ToString();
答案 2 :(得分:0)
好吧,因为你指的是一个字节ARRAY,fileInBytes真的看起来不像'1212549878563212450045',而是像这样:
{byte[22]}
[0]: 1
[1]: 2
etc.
如果情况确实如此,您应该使用StringBuilder进行fileInString,如下所示:
StringBuilder sb = new StringBuilder();
foreach (var b in fileInBytes)
{
sb.Append(b.ToString());
}
fileInString = sb.ToString();