2013-07-24 3 views
5

Есть ли простой способ преобразования массива байтов в строку, чтобы пройти следующий модульный тест? Я не могу найти кодировку, которая работает для всех значений.Преобразование байтового массива в строку в C#

[TestMethod] 
    public void TestBytToString() 
    { 
    byte[] bytArray = new byte[256]; 
    for (int i = 0; i < bytArray.Length; i++) 
    { 
     bytArray[i] = (byte)i; 
    } 
    string x = System.Text.Encoding.Default.GetString(bytArray); 
    for (int i = 0; i < x.Length; i++) 
    { 
     int y = (int)x[i]; 
     Assert.AreEqual(i, y); 
    } 
    } 
+0

'Array.ConvertAll' должны работать для создания' полукокса [] ', который вы можете передать в конструктор строк. –

+0

Избегайте «зачем вам это делать?» вопрос, единственная кодировка, в которой эта операция будет действительна, была бы ASCII, я думаю. – JerKimball

+0

Ascii терпит неудачу Ожидаемое: <128>, Actual: <63> – user2227596

ответ

0

Это сработало:

[TestMethod] 
    public void TestBytToString() 
    { 
    byte[] bytArray = new byte[256]; 
    ushort[] usArray = new ushort[256]; 
    for (int i = 0; i < bytArray.Length; i++) 
    { 
     bytArray[i] = (byte)i; 

    } 

    string x = System.Text.Encoding.Default.GetString(bytArray); 
    for (int i = 0; i < x.Length; i++) 
    { 
     int y = System.Text.Encoding.Default.GetBytes(x.Substring(i, 1))[0]; 
     Assert.AreEqual(i, y); 
    } 
    } 
1

System.Text.Encoding.UTF8 должен сделать трюк для вас.

+0

Что делать, если это не в UTF8? –

+0

Так что это за кодировка? Если это ASCII, он все еще находится на полях UTF8, который славится сокращением до нужного размера. – Tigran

+0

Когда я использую UTF8, он терпит неудачу с Ожидаемый: <128>, Актуально: <65533>. – user2227596

1
string x = Encoding.UTF8.GetString(bytArray, 0, bytArray.Length); 
+0

Когда я использую приведенное выше, оно терпит неудачу с ожидаемым: <128>, Actual: <65533>. – user2227596

1
var str = System.Text.Encoding.Default.GetString(bytArray); 
+0

Когда я использую вышеуказанное, это терпит неудачу. Ожидаемые: <128>, Актуально: <8364> – user2227596

0

Насколько я знаю Everthing выше значения 127 в байте считается отрицательным числом, и как символ может принимать только положительные значения, что приводит к неизвестнымам полукокса в каждой кодировке вы принимаете.

Вы можете преобразовать массив байтов в беззнаковое короткое (USHORT), а затем в строку ...

Смежные вопросы