อักขระมีกี่บิตหรือไบต์ [ปิด]


96

"อักขระ" มีกี่บิตหรือไบต์


1
คำถามและชื่อของคุณถามถึงสิ่งที่แตกต่างกัน ยังไงก็ตามฉันไม่เข้าใจคุณช่วยอธิบายเพิ่มเติมได้ไหม
galymzhan

ใช่ฉันก็ไม่แน่ใจเช่นกัน แต่ไบต์นั้นสอดคล้องกับชื่อของเขามากกว่า จำนวนอักขระในหนึ่งบิตมีความหมายเพียงเล็กน้อย แต่จำนวนบิตในอักขระหนึ่งตัวเหมาะสมกว่า ต้องใช้บริบทดังที่กล่าวมาแล้ว
Skurmedel

4
@Skurmedel: คุณคิดยังไง? ชื่อเรื่องว่า "bits" ด้วย
โคดี้เกรย์

@Cody Gray: ดูคำตอบที่แก้ไขของฉัน แท็กของเขาเขียนว่าไบต์ฉันจึงคิดว่ามันพิมพ์ผิด ฉันอาจจะคิดผิด
Skurmedel

@Skurmedel: ฉันไม่เข้าใจ ... คุณยังไม่ได้โพสต์คำตอบสำหรับคำถาม และใช่ฉันไม่ได้สังเกตเห็นแท็กมาก่อน แต่ฉันยังมีแนวโน้มที่จะคิดว่า 2/3 เป็นการจับคู่ที่ดีกว่า 1/3
โคดี้เกรย์

คำตอบ:


200

ขึ้นอยู่กับว่าตัวละครคืออะไรและมีการเข้ารหัสอะไร:

  • อักขระ ASCII ในการเข้ารหัส ASCII 8 บิตคือ 8 บิต (1 ไบต์) แม้ว่าจะใส่ได้ 7 บิตก็ตาม

  • อักขระ ISO-8895-1 ในการเข้ารหัส ISO-8859-1 คือ 8 บิต (1 ไบต์)

  • อักขระ Unicode ในการเข้ารหัส UTF-8 อยู่ระหว่าง 8 บิต (1 ไบต์) และ 32 บิต (4 ไบต์)

  • อักขระ Unicode ในการเข้ารหัส UTF-16 อยู่ระหว่าง 16 (2 ไบต์) และ 32 บิต (4 ไบต์) แม้ว่าอักขระทั่วไปส่วนใหญ่จะใช้เวลา 16 บิต นี่คือการเข้ารหัสที่ Windows ใช้ภายใน

  • อักขระ Unicode ในการเข้ารหัส UTF-32 มักจะเป็น 32 บิต (4 ไบต์)

  • อักขระ ASCII ใน UTF-8 คือ 8 บิต (1 ไบต์) และใน UTF-16 - 16 บิต

  • อักขระเพิ่มเติม (ที่ไม่ใช่ ASCII) ใน ISO-8895-1 (0xA0-0xFF) จะใช้เวลา 16 บิตใน UTF-8 และ UTF-16

นั่นหมายความว่ามีบิตระหว่าง 0.03125 ถึง 0.125 อักขระ


คำตอบนี้ช่วยได้มากเมื่อจัดการกับซ็อกเก็ตการเข้ารหัสข้อความและอื่น ๆ
Mário Meyrelles

17

ไบต์มี 8 บิต (โดยปกติจะพูดใน Windows)

อย่างไรก็ตามหากคุณกำลังจัดการกับอักขระจะขึ้นอยู่กับชุดอักขระ / การเข้ารหัส อักขระ Unicode สามารถมีขนาด 2 หรือ 4 ไบต์ซึ่งจะเป็น 16 หรือ 32 บิตในขณะที่Windows-1252บางครั้งเรียกว่า ANSI ไม่ถูกต้องมีเพียง 1 ไบต์ดังนั้น 8 บิต

ใน Windows เวอร์ชันเอเชียและอื่น ๆ บางระบบจะทำงานเป็นไบต์คู่ดังนั้นอักขระจึงมีขนาด 16 บิต

แก้ไข

ตามความคิดเห็นของ Matteo Windows เวอร์ชันร่วมสมัยทั้งหมดใช้ 16 บิตภายในต่ออักขระ


แอพดั้งเดิมบางแอพยังคงใช้ตัวอักษร 1 ไบต์กับโค้ดเพจในเครื่อง แต่ Windows เวอร์ชัน NT ทั้งหมดจะทำงานภายในด้วยอักขระ 2 ไบต์ (UCS-2 สูงสุด NT4, UTF-16 จาก Windows 2000 เป็นต้นไปจัดเก็บเป็นwchar_t) ไม่ใช่เฉพาะเอเชีย ดังนั้นควรทำแอปพลิเคชันที่ใหม่กว่าทั้งหมด (ใน Linux แต่เป็นเรื่องที่แตกต่างไปจากเดิมอย่างสิ้นเชิงเนื่องจากโดยปกติ UTF-8 จะถูกใช้ทั่วทั้งระบบ)
Matteo Italia

@Matteo: โปรดทราบว่าใน Windows double-byte ไม่จำเป็นต้องเหมือนกับ Unicode อ้างอิง
Cody Grey

@Cody Grey: ใช่โดยปกติแล้วเมื่อคุณอ่านการเข้ารหัสแบบ "double-byte" จะเป็นของเอเชียแบบดั้งเดิมและจะถูกจัดเก็บเป็นหลายรายการcharในขณะที่สตริง Unicode จะถูกจัดเก็บโดยใช้wchar_tประเภท อย่างไรก็ตามเมื่อ NT เริ่มต้นwchar_tก็เพียงพอที่จะหลีกเลี่ยงคู่ตัวแทน แต่ตอนนี้เป็น UTF-16 แม้แต่wchar_tสตริงก็สามารถมีอักขระที่มีความยาวผันแปรได้ดังนั้นใน Windows อักขระ Unicode อาจใช้เวลาตั้งแต่ 2 ถึง 4 ไบต์ (1 หรือ 2 wchar_t).
Matteo Italia

@ Matteo: ใช่ฉันเห็นด้วยกับคุณ ฉันคิดว่าฉันเห็นบางอย่างที่แนะนำแตกต่างออกไปก่อนที่คุณจะแก้ไขความคิดเห็นแรกของคุณและนั่นคือตอนที่ฉันเขียน UTF-16 สตริง Unicode ถูกใช้เป็นการภายในสำหรับ Windows ทุกเวอร์ชัน
โคดี้เกรย์

@Cody Gray: ฉันมักจะแก้ไขความคิดเห็นของฉันมากเกินไปมันทำให้เกิดความสับสน:)
Matteo Italia
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.