2011-12-20 77 views
0

我試圖以下上下文中創建從 「Convert.ToChar(b[i])」 的變量或字符串:創建從一個字節[]變量(C#)的字符串

byte[] b = new byte[100]; 
    int k = s.Receive(b); 
    Console.WriteLine("Recieved..."); 
    for (int i = 0; i < k; i++) 
     Console.Write(Convert.ToChar(b[i])); 

例如:

var str = Convert.ToChar(b[i]); 

但以上不起作用,因爲「i」是not defined within the current context

+2

「創建變量」的含義並不十分清楚。在編譯時必須知道變量名稱......你真的想要實現什麼? –

+0

嗨,要獲得「Convert.ToChar(b [i])」爲字符串格式 – Mike

+1

你是否在var關鍵字後缺少一些標識符 –

回答

4

它只是一個for循環沒有給出足夠的範圍?請嘗試以下...

byte[] b = new byte[100]; 
int k = s.Receive(b); 
Console.WriteLine("Recieved..."); 
for (int i = 0; i < k; i++) 
{ 
    Console.Write(Convert.ToChar(b[i])); 
    var myVariable = Convert.ToChar(b[i]); 
} 

需要注意的是,如果你不包括大括號,for循環將只具有第一線的範圍在其下方,所以var = Convert.ToChar(b[i]);線將無法訪問循環範圍中的i變量。

這就是爲什麼我總是確保我將大括號放在循環的代碼中,即使它是循環內的單一行 - 也很容易跟蹤循環的範圍。

+0

是的,你明白了......謝謝! – Mike

+0

另請注意,其他答案可能與將字符串實際拉出的方式更爲相關,但我完全是在處理您的範圍問題。 – ZombieSheep

+0

+1因爲看到顯而易見的(其他人沒有)問題是dclear,這只是海報中一個不能理解範圍的點(正好是我們許多人在開始時發生的),所以「我」完全不在範圍。以及對答案的簡短和準確。 – TomTom

1

這是因爲我只在for循環內存在。 嘗試將所有值添加到數組中,然後從中訪問特定項目。

就你而言,既然你想在你的代碼中創建一個字符串,你可以使用StringBuilder來創建字符串。例如:

StringBuilder a = new StringBuilder(); 
a.Append(Convert.ToChar(b[i]); 
string str = a.ToString(); 

或在你的例子那就是:

byte[] b = new byte[100]; 
int k = s.Receive(b); 
Console.WriteLine("Recieved..."); 
StringBuilder a = new StringBuilder(); 

for (int i = 0; i < k; i++) 
{ 
    a.Append(Convert.ToChar(b[i]); 
} 
string str = a.ToString(); 
1

這是相當清楚你的意思,但它聽起來像是你可能想:

byte[] b = new byte[100]; 
int k = s.Receive(b); 
Console.WriteLine("Received..."); 
string text = Encoding.ASCII.GetString(b, 0, k); 

注該ASCII不是唯一可能的編碼 - 正確的編碼取決於您使用的協議。

相關問題