2013-04-12 14 views
8

Mam tablicę bajtów. 8-bitowa wartość każdego bajtu jest tym, co chcę jako znaki w swoim łańcuchu. Możesz myśleć o moich 8-bitowych wartościach ASCII, ANSI, UTF-8, ISO-8859-1, dziennych odczytach temperatury, odległości w calach od punktu na linii lub cokolwiek chcesz. To nieistotne.Jak przekonwertować bajt [] na ciąg bez kodowania, bez utraty danych

Kiedy skończę. znak w pozycji N w moim łańcuchu powinien mieć taką samą wartość jak bajt w pozycji N. Oznacza to, że 8 bitów o wysokiej kolejności powinno mieć wartość 0, a 8 bitów niskiego rzędu powinno być takie samo jak bajt źródłowy.

Jakie kodowanie używam, które po prostu mapuje bajty na znaki bez żadnych zmian?

+0

Po prostu ciekawa jaka jest tego potrzeba. Ten ciąg nie będzie zbyt użyteczny - nie będzie można go używać do wyświetlania lub drukowania i prawdopodobnie nie będzie ładnie pasował do żadnego zewnętrznego systemu. Po co konwertować to z bajtów? –

+0

@JoeEnos dlaczego ciąg nie nadaje się do wyświetlania lub drukowania? Zależnie od danych w tablicy bajtów może tak być. – phoog

+0

@JoeEnos, celem frazowania tego pytania, tak jak ja, było unikanie kupy "dlaczego to robisz?" oraz "potrzeba obejścia kodowania jest czerwoną flagą wskazującą, że twoje rozwiązanie jest po prostu złe" odpowiada. Pytanie brzmi: ugotowana forma mojego problemu, czy po prostu, jak mogę zamienić tablicę bajtów w String bez tego, że wszyscy inteligentni faceci w Microsofcie zmieniają moje dane, ponieważ myślą, że wiedzą lepiej niż ja, co próbuję. do zrobienia. :-) – Craig

Odpowiedz

14

Dla tego wymogu zrezygnowałbym z kodowania, ponieważ nie znam szczegółów tego, co robią, i po prostu konwertowałem bajty samodzielnie.

string Convert(byte[] data) 
{ 
    char[] characters = data.Select(b => (char)b).ToArray(); 
    return new string(characters); 
} 
+0

To jest zasadniczo to, co robiłem, ale popełniłem błąd w innym miejscu, który zamaskował mój sukces. :-) – Craig

+1

co powiesz na odwrót? jak przekonwertować napis utworzony tą metodą z powrotem na tablicę bajtów? – MaxOvrdrv

+0

Wiele opcji. Ten z najmniejszym typowaniem: 's.ToCharArray(). Wybierz (c => (bajt) c) .ToArray();' - gdzie s jest łańcuchem. Zauważ, że to rozwiązanie zależy od założenia, ważnego, biorąc pod uwagę pierwotne pytanie, że wszystkie znaki są w zakresie od 0 do 255. W innych kontekstach będziesz musiał użyć kodowania tekstu. – phoog

Powiązane problemy