2012-02-02 16 views
17

Mam następujący kod:StringBuilder i bajt konwersja

StringBuilder data = new StringBuilder(); 
for (int i = 0; i < bytes1; i++) 
{ 
    data.Append("a"); 
} 
byte[] buffer = Encoding.ASCII.GetBytes(data); 

Ale otrzymuję ten błąd:

cannot convert from 'System.Text.StringBuilder' to 'char[]' 
The best overloaded method match for 'System.Text.Encoding.GetBytes(char[])' 
has some invalid arguments 

Odpowiedz

24

Poniższy kod rozwiąże problem.

StringBuilder data = new StringBuilder(); 
for (int i = 0; i < bytes1; i++) 
{ data.Append("a"); } 
byte[] buffer = Encoding.ASCII.GetBytes(data.ToString()); 

Problemem jest to, że są przechodzącą StringBuilder do funkcji GetBytes kiedy trzeba przechodząc wynik ciąg od StringBuilder.

3

Spróbuj tego:

byte[] buffer = Encoding.ASCII.GetBytes(data.ToString().ToCharArray()); 
+1

Nie trzeba jawnie konwertować napisu na tablicę, GetBytes() zaakceptuje ciąg znaków. – roken

+0

dzięki @roken, masz rację –

11

getBytes nie akceptuje StringBuilder jako parametr. Użyj ciągu znaków z danymi.ToString()

byte[] buffer = Encoding.ASCII.GetBytes(data.ToString()); 
4

Spróbuj tego. StringBuilder jest obiektem .. stamtąd, musisz pobrać wartość ciągu w następujący sposób.

byte[] buffer = Encoding.ASCII.GetBytes(data.ToString()); 
2

ASCII nie jest dobrym wyborem do kodowania tekstu w tym stuleciu. Aplikacje internetowe i mobilne powinny przynajmniej używać UTF-8, a także powinien być każdy inny rodzaj aplikacji, która powinna działać w zglobalizowanym środowisku biznesowym lub sieci społecznościowej.

StringBuilder builder = new StringBuilder(); 
for (int i = 0; i < iLength; ++ i) 
    builder.Append("a"); 
byte[] bytesFromBuilder = Encoding.UTF8.GetBytes(builder.ToString());