2013-04-12 19 views
8

Bir bayt dizim var. Her baytın 8 bit değeri, String'imdeki karakterler olarak istediğim şeydir. Benim 8-bit değerlerini ASCII, ANSI, UTF-8, ISO-8859-1, günlük sıcaklık okumaları, bir satırdaki bir noktadan inç cinsinden mesafe veya istediğiniz gibi düşünebilirsiniz. Bu alakasız. Bittiğimde,Kodlama olmadan byte [] to String dönüştürülür, veri kaybı yok

. String'imdeki N konumunda bulunan char, N konumundayken, bayt ile aynı değere sahip olmalıdır. Yani, yüksek sıra 8 bitleri 0 olmalı ve düşük sıra 8 bitleri, kaynak bayt ile aynı olmalıdır.

Ne Kodlama, yalnızca baytları hiçbir değişiklik yapmadan chars'a kullanır mı?

+0

Bunun için ne gerek olduğunu merak ediyorum. Bu dize çok kullanışlı olmayacak - görüntüleme veya baskı için kullanılamayacak ve muhtemelen herhangi bir harici sistemle güzel bir şekilde yerleştirilmeyecek. Neden onu bayttan dönüştürüyoruz? –

+0

@JoeEnos, neden görüntü veya baskı için dizge kullanılabilir değil? Bayt dizisindeki verilere bağlı olarak, çok iyi olabilir. – phoog

+0

@JoeEnos, benim gibi soruyu ifade etmenin amacı, bir demet "" neden bunu yapıyorsun? " ve "kodlamayı atlamanın ihtiyacı, çözümün yanlış olduğunu gösteren kırmızı bir işarettir" yanıtları. Sorun benim problemimin kaynaştırılmış halidir ya da Microsoft'un veriyi karıştırmasıyla ilgili tüm akıllı adamlar olmadan bir dizi baytı bir String'e nasıl dönüştürebilirim çünkü denediğimi yaptığımdan daha iyi biliyorlar. yapmak. :-) – Craig

cevap

14

Bu gereksinim için kodlama yapmaktan kaçınacağım, çünkü yaptıklarının ayrıntılarını bilmiyorum ve yalnızca baytları kendim dönüştürüyorum.

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

Bu aslında yaptığım şeydi, ama başarımı maskeleyen başka bir yerde hata yapıyordu. :-) – Craig

+1

Diğer yoldan ne dersin lütfen? Bu yöntem tarafından oluşturulan dizeyi bayt dizisine nasıl dönüştürebilirim? – MaxOvrdrv

+0

Birçok seçenek. En az yazılanla: 's.ToCharArray(). (C => (byte) c) 'yi seçin .ToArray();' - Burada s dizesidir. Bu çözümün, orijinal soruya göre geçerli olan, tüm karakterler 0 ile 255 arasında olduğu varsayımına bağlı olduğunu unutmayın. Diğer bağlamlarda, bir metin kodlaması kullanmanız gerekir. – phoog