2011-10-13 68 views
2
byte[] tagData = GetTagBytes(tagID, out tiffDataType, out numberOfComponents); 
string str = Encoding.ASCII.GetString(tagData); 

用windows phone平臺,該框架不支持Encoding.ASCII.GetString()方法。Windows Phone平臺的Encoding.ASCII.GetString()

我曾經從Passant的帖子ASCIIEncoding In Windows Phone 7 befroe那裏得到幫助。但它只能將string轉換爲byte[],現在我需要將byte[]轉換爲string

任何幫助將是不錯〜

+1

你確定你真的需要ASCII嗎? 90%要求ASCII的用戶真的想要UTF-8 – xanatos

+0

[此答案](http://stackoverflow.com/a/9858196/1028230)不起作用?你應該/可能(?)有一個'GetString(Byte [],Int32,Int32)'方法,你可以使用'GetString(tagData,0,tagData.Length)',正確嗎? – ruffin

回答

3

如果你試圖瞭解Hans' code的作品,你會很容易拿出反向轉換:

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<T>(IEnumerable<T>)過載你牛逼o使用有點醜陋和低效:

string AsciiToString(byte[] bytes) 
{ 
    return string.Concat( 
    (bytes.Select(b => (b <= 0x7f ? (char)b : '?').ToString())) 
    .ToArray() 
    ); 
} 
+0

是的,這是我想要的。因爲我只是c#的開始,很多人都困惑於我。謝謝你的幫助。 – lavandachen

0

如果你真的有ASCII(所以< = 1408米),你可以簡單地把單個字節爲char。

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

var str = sb.ToString(); 

我補充一點,可能你需要的是Encoding.UTF8.GetString(tagData) :-)

0

基於賽爾吉 - 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(); 
    } 

還沒有嘗試過,但。隨意編輯