จะทราบขนาดของสตริงเป็นไบต์ได้อย่างไร?


106

ฉันสงสัยว่าฉันจะรู้ได้ไหมว่า a stringใน C # ยาวเป็นไบต์ใครรู้บ้าง?


ลองดูคำตอบนี้
dasblinkenlight

12
คุณกำลังถามว่าstringอ็อบเจ็กต์ใช้หน่วยความจำเท่าใดหรือจำนวนไบต์ที่การแสดงสตริงจะใช้เมื่อเขียนไปยังไฟล์หรือส่งผ่านเครือข่าย (เช่นเข้ารหัส) เนื่องจากเป็นคำถามสองข้อที่แตกต่างกันอย่างสิ้นเชิง Majidgeek เกือบจะตอบอดีตในขณะที่ diya ตอบหลัง (อย่างน้อยก็สำหรับการเข้ารหัสทั่วไปสองครั้ง)
Allon Guralnek


@AllonGuralnek: จุดดี คุณรู้หรือไม่ว่าทำไม diya ด้านล่างไม่แนะนำให้ใช้ System.Text.Encoding.Unicode.GetByteCount แทน ทำไมต้องเป็น ASCIIEncoding?
giorgim

@Giorgi: เนื่องจากUnicodeเป็นคุณสมบัติคงSystem.Text.Encodingที่ซึ่งเป็นคลาสพื้นฐานของASCIIEncodingคำสั่งทั้งสองจึงเหมือนกัน คุณสามารถเข้าถึงสมาชิกแบบคงที่จากคลาสย่อยได้เช่นกัน (แต่ไม่ถือว่าเป็นสำนวน)
Allon Guralnek

คำตอบ:


132

คุณสามารถใช้การเข้ารหัสเช่น ASCII เพื่อรับอักขระต่อไบต์โดยใช้ไฟล์ System.Text.Encodingคลาส

หรือลองดู

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

13
คำถามโง่ ๆ แต่เราจะรู้ได้อย่างไรว่าจะใช้คลาส Unicode หรือ ASCII หากข้อมูลในสตริงมาจากไฟล์ของบุคคลที่สาม
Matthew Lock

7
@MatthewLock คุณควรใช้ UTF16 (หรือของ majidgeek Length * sizeof(Char)ซึ่งควรให้ผลลัพธ์เหมือนกันเนื่องจากแต่ละรายการCharคือ UTF16 / 2 ไบต์) หากคุณต้องการจำนวนไบต์เท่ากันกับการแสดงสตริงภายใน หากคุณต้องการจำนวนเงินที่แน่นอนของหน่วยความจำวัตถุทั้งหมดจะใช้เวลามากกว่าแค่จำนวนไบต์ในอาร์เรย์ตัวละครภายในของจริงแล้วคุณอาจพิจารณาวิธีการทั่วไปมากขึ้น
Bob

92

จากMSDN :

Stringวัตถุเป็นชุดตามลำดับของSystem.Charวัตถุที่เป็นตัวแทนของสตริง

ดังนั้นคุณสามารถใช้สิ่งนี้:

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

เท่าที่ฉันสามารถเข้าใจพื้นฐานของโครงสร้างข้อมูลมันเป็นตัวเลือกที่ 'ละเอียดที่สุด' ที่สุดที่จะเปรียบเทียบกับ
LoneXcoder

2
อย่าลืมคำนึงถึงขนาดของสมาชิกที่มีความยาว int howManyBytes = yourString.Length * sizeof (Char) + sizeof (int);
Zoltan Tirinda

จะเกิดอะไรขึ้นถ้าความยาวสตริงของฉันใหญ่กว่า Int?
Jurijs Kastanovs

นี่ควรเป็นคำตอบที่ถูกต้อง นอกจากนี้ความยาวคือจำนวนไบต์ที่เซิร์ฟเวอร์จะได้รับหากคุณส่งสตริงเดียวกันนั้น นี่คือสิ่งที่ฉันต้องการ
DaWiseguy

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

หรือ

System.Text.ASCIIEncoding.ASCII.GetByteCount(yourString);
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.