Encoding.ASCII.GetString () в платформе Windows Phone - PullRequest
2 голосов
/ 13 октября 2011
byte[] tagData = GetTagBytes(tagID, out tiffDataType, out numberOfComponents);
string str = Encoding.ASCII.GetString(tagData);

На платформе Windows Phone платформа не поддерживает метод Encoding.ASCII.GetString().

Раньше я получал помощь от сообщения Пассанта ASCIIEncoding В Windows Phone 7 befroe. Но он только конвертирует string в byte[], теперь мне нужно конвертировать byte[] в string.

Любая помощь была бы хороша ~

Ответы [ 4 ]

3 голосов
/ 13 октября 2011

Если вы попытаетесь понять, как работает код Ганса , вы легко придете к обратному преобразованию:

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 (IEnumerable ) в предыдущих версиях платформы вынуждает вас использовать несколько уродливые и неэффективные:

string AsciiToString(byte[] bytes)
{
  return string.Concat( 
    ( bytes.Select(b => (b <= 0x7f ? (char)b : '?').ToString()) )
    .ToArray()
    );
}
0 голосов
/ 01 ноября 2013

Основываясь на Серже - appTranslator, я создал перегруженную реализацию, которая полностью имитирует Encoding.ASCII.GetString для silverlight

    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();
    }

Хотя еще не пробовал.Не стесняйтесь редактировать

0 голосов
/ 13 октября 2011

Метод Convert.ToBase64String (byte []) возвращает строку

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

Надеюсь, это поможет!

0 голосов
/ 13 октября 2011

Если у вас действительно есть ASCII (т. Е. <= 7f), вы можете просто разыграть отдельные байты как char. </p>

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

var str = sb.ToString();

Я добавлю, что, вероятно, вам нужно Encoding.UTF8.GetString(tagData): -)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...