Windows Phone平台中的Encoding.ASCII.GetString()

时间:2011-10-13 07:35:32

标签: c# windows-phone-7 encoding

byte[] tagData = GetTagBytes(tagID, out tiffDataType, out numberOfComponents);
string str = Encoding.ASCII.GetString(tagData);

使用Windows Phone平台,该框架不支持Encoding.ASCII.GetString()方法。

我曾经从Passant的帖子ASCIIEncoding In Windows Phone 7 befroe获得帮助。但它只会将string转换为byte[],现在我需要将byte[]转换为string

任何帮助都会很好〜

4 个答案:

答案 0 :(得分:3)

如果您尝试了解Hans' code的工作原理,您可以轻松实现逆转换:

public static string AsciiToString(byte[] bytes) { 
        StringBuilder sb = new StringBuilder(bytes.Length); 
        foreach(byte b in bytes) {
            sb.Append(b<=0x7f ? (char)b : '?'); 
        } 
        return sb.ToString(); 
    } 

您也可以使用LINQ,但仅在.NET 4.0上提供了一个不错的解决方案:

string AsciiToString(byte[] bytes)
{
  return string.Concat( bytes.Select(b => b <= 0x7f ? (char)b : '?') );
}

在以前版本的框架中,令人遗憾的缺少String.Concat<T>(IEnumerable<T>)重载会迫使你使用有点丑陋和低效的内容:

string AsciiToString(byte[] bytes)
{
  return string.Concat( 
    ( bytes.Select(b => (b <= 0x7f ? (char)b : '?').ToString()) )
    .ToArray()
    );
}

答案 1 :(得分:0)

如果你真的有ASCII(所以&lt; = 7f),你可以简单地将单个字节转换为char。

StringBuilder sb = new StringBuilder(tagData.Length);
foreach (var b in tagData)
{
    sb.Append((char)b);
}

var str = sb.ToString();

我会补充说你需要的是Encoding.UTF8.GetString(tagData): - )

答案 2 :(得分:0)

Convert.ToBase64String方法(byte [])返回字符串

http://msdn.microsoft.com/en-us/library/dhx0d524(VS.95).aspx

我希望这有帮助!

答案 3 :(得分:0)

基于Serge - appTranslator,我创建了一个重载实现,完全模仿Silveroding的Encoding.ASCII.GetString

    public static string EncodingASCIIGetString(byte[] bytes, int index, int count)
    {
        StringBuilder sb = new StringBuilder(count);

        for(int i = index; i<(index+count); i++)
        {
            sb.Append(bytes[i] <= 0x7f ? (char)bytes[i] : '?');             
        }

        return sb.ToString();
    }
然而,还没试过。随意编辑