正确的编码样式,用于将bytes []转换为字符串

时间:2013-11-23 14:36:25

标签: c# .net arrays encoding

我正在尝试将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

将字节数组转换为字符串

3 个答案:

答案 0 :(得分:1)

如果您想将byte[]编码为stringbase64 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();