2012-02-02 31 views
17

Tôi đã đoạn mã sau:StringBuilder và byte chuyển đổi

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

Nhưng tôi nhận được lỗi này:

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

Trả lời

24

Mã sau đây sẽ khắc phục sự cố của bạn.

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

Vấn đề là bạn đang đi qua một StringBuilder đến GetBytes chức năng khi bạn cần phải đi qua các kết quả chuỗi từ StringBuilder.

3

thử điều này:

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

Không cần phải chuyển đổi chuỗi một cách rõ ràng thành mảng, GetBytes() sẽ chấp nhận một chuỗi. – roken

+0

cảm ơn @roken, bạn nói đúng –

11

getBytes không chấp nhận một StringBuilder như một tham số. Sử dụng chuỗi có dữ liệu.ToString()

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

Hãy thử điều này. StringBuilder là đối tượng .. từ đó, bạn phải nhận được giá trị chuỗi như sau.

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

ASCII không phải là lựa chọn mã hóa tốt cho văn bản trong thế kỷ này. Web và các ứng dụng di động nên ít nhất là sử dụng UTF-8 và bất kỳ loại ứng dụng nào khác được cho là hoạt động trong môi trường mạng xã hội hoặc doanh nghiệp toàn cầu hóa.

StringBuilder builder = new StringBuilder(); 
for (int i = 0; i < iLength; ++ i) 
    builder.Append("a"); 
byte[] bytesFromBuilder = Encoding.UTF8.GetBytes(builder.ToString()); 
Các vấn đề liên quan