2012-01-03 25 views
56

Tôi tự hỏi nếu tôi có thể biết bao lâu trong byte cho một string trong C#, bất cứ ai biết?Làm thế nào để biết kích thước của chuỗi theo byte?

+0

Check-out [câu trả lời này] (http://stackoverflow.com/questions/472906/net-string-to-byte-array-c-sharp). – dasblinkenlight

+9

Bạn có hỏi bao nhiêu bộ nhớ một đối tượng 'string' chiếm hay bao nhiêu byte biểu diễn chuỗi sẽ chiếm khi được ghi vào một tệp hoặc được gửi qua mạng (tức là được mã hóa), bởi vì đó là hai câu hỏi hoàn toàn khác nhau. majidgeek gần như trả lời trước đây trong khi diya trả lời sau này (ít nhất là cho hai mã hóa phổ biến). –

+0

bản sao có thể có của [bao nhiêu byte sẽ mất?] (Http://stackoverflow.com/questions/3967411/how-much-bytes-will-take) – nawfal

Trả lời

88

Bạn có thể sử dụng mã hóa như ASCII để có được một nhân vật mỗi byte bằng cách sử dụng các lớp System.Text.Encoding.

hoặc thử này

System.Text.ASCIIEncoding.Unicode.GetByteCount(string); 
    System.Text.ASCIIEncoding.ASCII.GetByteCount(string); 
+10

Câu hỏi ngu ngốc, nhưng làm cách nào chúng ta biết có nên sử dụng lớp Unicode hay ASCII nếu dữ liệu trong chuỗi đến từ tệp của bên thứ 3 không? –

+5

@MatthewLock Bạn nên sử dụng UTF16 (hoặc majidgeek's 'Length * sizeof (Char)', sẽ cho kết quả tương tự vì mỗi 'Char' là UTF16/2-byte) nếu bạn muốn cùng một số byte như biểu diễn bên trong của một chuỗi. Nếu bạn thực sự muốn số lượng bộ nhớ chính xác mà toàn bộ đối tượng cần, thay vì chỉ số byte trong mảng ký tự bên trong, thì bạn có thể xem xét [phương pháp tổng quát hơn] (http://stackoverflow.com/questions/1128315/ find-size-of-object-instance-in-byte-in-c-sharp). – Bob

16
System.Text.ASCIIEncoding.Unicode.GetByteCount(yourString); 

Hoặc

System.Text.ASCIIEncoding.ASCII.GetByteCount(yourString); 
68

Từ MSDN:

Một đối tượng String là một bộ sưu tập tuần tự của System.Char đối tượng đại diện cho một chuỗi.

Vì vậy, bạn có thể sử dụng này:

var howManyBytes = yourString.Length * sizeof(Char); 
+0

theo như tôi có thể hiểu được khái niệm cơ bản về cấu trúc dữ liệu, đó là sự lựa chọn 'pined' nhất để so sánh với – LoneXcoder

+0

Đừng quên tính đến kích thước của thành viên độ dài. int howManyBytes = yourString.Length * sizeof (Char) + sizeof (int); –

+0

Nếu chiều dài chuỗi của tôi lớn hơn Int thì sao? –

Các vấn đề liên quan