C # конвертировать байтовый массив с нулями в строку - PullRequest
2 голосов
/ 22 июля 2010

Все,

У меня есть вопрос о преобразовании байтовых массивов с нулевыми значениями в строку C #.Вот пример моего байтового массива, который я хотел бы преобразовать в строку.Я ожидаю получить строку со значением SHKV

[0]: 83
[1]: 0
[2]: 72
[3]: 0
[4]: 75
[5]: 0
[6]: 86
[7]: 0

Как я могу сделать это в C #?

Спасибо, MK

Ответы [ 7 ]

6 голосов
/ 22 июля 2010

Вам действительно нужно знать оригинальную кодировку, чтобы успешно преобразовать ее.

Я подозреваю, что в этом случае кодировка, вероятно, будет UTF-16 , которую можно преобразовать следующим образом:

byte[] yourByteArray = new byte[] { 83, 0, 72, 0, 75, 0, 86, 0 };

string yourString = Encoding.Unicode.GetString(yourByteArray));

Console.WriteLine(yourString);    // SHKV
3 голосов
/ 22 июля 2010

Это выглядит как UTF-16 с прямым порядком байтов, поэтому:

string s = Encoding.Unicode.GetString(data);
1 голос
/ 22 июля 2010

Вы гарантированно всегда видите эту кодировку строк (char, null, char, null и т. Д.)?Если это так, вы можете просто использовать кодировщик строки Unicode для его декодирования:

    Byte[] contents = new Byte[] {83, 0, 72, 0, 75, 0, 86, 0};
    Console.WriteLine(System.Text.Encoding.Unicode.GetString(contents));
0 голосов
/ 22 июля 2010

byte [] b = новый байт [] {83,0,72,0,75,0,86,0};

System.Text.Encoding.Unicode.GetString (b);

0 голосов
/ 22 июля 2010

Использование синтаксиса Linq:

var chars = 
    from b in byteArray
    where b != 0
    select (char) b;

string result = new String(chars.ToArray());

Хотя лучше выбрать правильную кодировку, как предлагали другие.

0 голосов
/ 22 июля 2010
string str = new ASCIIEncoding().GetString(bytes.Where(i => i != 0).ToArray());

Также вы можете использовать UnicodeEncoding, UTF32Encoding, UTF7Encoding или UTF8Encoding

0 голосов
/ 22 июля 2010

Предполагая байты ASCII, вы можете использовать LINQ:

new string(bytes.Where(b => b != 0).Select(b => (char)b).ToArray());

Однако я подозреваю, что вы пытаетесь взломать данные Unicode.

DO NOT .

Вместо этого используйте Encoding класс .

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