Làm thế nào để biết kích thước của chuỗi theo byte?


103

Tôi tự hỏi liệu tôi có thể biết bao lâu tính bằng byte cho một stringtrong C #, có ai biết không?



11
Bạn đang hỏi một stringđối tượng chiếm bao nhiêu bộ nhớ hoặc bao nhiêu byte biểu diễn của một 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 câu trước trong khi diya trả lời câu sau (ít nhất là đối với hai bảng mã phổ biến).
Allon Guralnek

có thể có bản sao bao nhiêu byte sẽ mất?
nawfal

@AllonGuralnek: Điểm tốt. bạn có biết tại sao diya dưới đây không đề xuất sử dụng System.Text.Encoding.Unicode.GetByteCount thay thế không? Tại sao lại là phần mã hóa ASCII?
giorgim

@Giorgi: Vì Unicodelà thuộc tính tĩnh của System.Text.Encoding, là lớp cơ sở của ASCIIEncodingnên cả hai câu lệnh thực sự giống nhau. Bạn cũng có thể truy cập một thành viên tĩnh từ các lớp con (nhưng nó không được coi là thành ngữ).
Allon Guralnek

Câu trả lời:


131

Bạn có thể sử dụng mã hóa như ASCII để lấy một ký tự trên mỗi byte bằng cách sử dụng System.Text.Encodinglớp.

hoặc thử cái này

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

13
Câu hỏi ngớ ngẩn, nhưng làm thế 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ứ ba?
Matthew Lock

7
@MatthewLock Bạn nên sử dụng UTF16 (hoặc majidgeek's Length * sizeof(Char), sẽ cho kết quả giống nhau vì mỗi cái Charlà UTF16 / 2-byte) nếu bạn muốn cùng số byte như đại diện bên trong của một chuỗi. Nếu bạn thực sự muốn lượng bộ nhớ chính xác mà toàn bộ đối tượng chiếm lấy, thay vì chỉ số byte trong mảng ký tự bên trong của nó, thì bạn có thể xem xét một phương pháp tổng quát hơn .
Bob

91

Từ MSDN :

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

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

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

như xa như tôi có thể hiểu điều cơ bản của cấu trúc dữ liệu đó là hầu hết các 'mòn mỏi mong' choise để so sánh với
LoneXcoder

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

Điều gì sẽ xảy ra nếu độ dài Chuỗi của tôi lớn hơn Int?
Jurijs Kastanovs

Đây phải là câu trả lời chính xác. Ngoài ra, .Length là số byte mà máy chủ sẽ nhận được nếu bạn gửi cùng một chuỗi đó. Đây là những gì tôi cần.
DaWiseguy 27/09/19

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

Hoặc là

System.Text.ASCIIEncoding.ASCII.GetByteCount(yourString);
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.