ฉันกำลังพยายามสร้างตัวเข้ารหัส PDU ซึ่งกำหนดให้ฉันต้อง:
- แปลงอักขระแต่ละตัวในสตริงให้เป็นค่า ASCII
- แปลงค่า ASCII เป็นไบนารี่ 7 บิต
- การใช้วิธีนี้ - การแปลง 7 บิตเป็น 8 บิต ฉันกำลังทำสิ่งนี้ในฟังก์ชันโดยใช้เซปเท็ตแรกและเพิ่มจากส่วนท้ายของเซปเท็ตถัดไปจนกระทั่งอันแรกมี 8 บิต (เหมือนที่แสดงใน url) โดยพื้นฐานแล้วจะดำเนินต่อไปตลอด
- การใช้ไบนารี่ 8 บิตฉันสามารถแปลงเป็น Hex สำหรับสตริง PDU ของฉันได้
ทั้งหมดนี้ใช้งานได้ดีเมื่อใช้:
ASCII = Convert.ToInt32(char)
Convert.ToString(ASCII, 2)
= 7 บิตSeptetToOctet(7bit)
= 8 บิต (ฟังก์ชันของฉัน)Convert.ToString(Convert.ToInt32(8bit, 2), 16).ToUpper()
(ฉันจะเพิ่ม 0 หากแปลงเป็น 1 ตัวอักษรเท่านั้น)
ปัญหาของฉันมาถึงแล้ว เมื่อพยายามแปลงอักขระพิเศษ เช่น ภาษาเดนมาร์ก 'ø' คุณจะได้ค่า ASCII เป็น 248 ซึ่งเมื่อ Convert.ToString(248, 2)
ให้ค่า 11111000
กับฉัน (8 บิต) ดังนั้นฉันต้องรู้วิธีบังคับให้แปลง 'ø' เป็นไบนารี่ 7 บิตหรือการแปลง SeptetToOctet (ซึ่งเป็นการแปลงใน URL ที่ให้ไว้) จำเป็นต้องมีการแก้ไข แต่ตอนนี้ฉันมีความรู้เพียงพอเกี่ยวกับการแปลงไบนารีและไบนารี่ที่จะรู้ จะทำให้ถูกต้องได้อย่างไร
char
นั้นเป็นหน่วยรหัส UTF-16 โดยเนื้อแท้ คุณไม่จำเป็นต้องโทรConvert.ToInt32
เลย แต่โดยพื้นฐานแล้ว หากคุณมีอักขระที่ไม่ใช่ ASCII คุณจำเป็นต้องรู้ว่าอักขระเหล่านั้นมีความหมายอย่างไรในการนำเสนอ... - person Jon Skeet   schedule 12.09.2011