หลังจากศึกษาการเข้ารหัสเราได้เรียนรู้ความสัมพันธ์ระหว่างการเข้ารหัส GB2312 และรหัสสถานที่ หลังจากพยายามเราได้รับโปรแกรมนี้
ค้นหาดูเหมือนจะไม่มีใครเขียนดังนั้นฉันจึงโพสต์ไว้ที่นี่
รุ่นแรกดั้งเดิม:
http://bbs.blueidea.com
http://mytju.com/classcode/
พิมพ์ซ้ำได้ตลอดเวลาใช้ได้ตลอดเวลา
1. คำอธิบายสั้น ๆ
(1) คำจำกัดความของมาตรฐาน GB2312 เป็นรหัสตำแหน่งจริง
มีทั้งหมด 94 แถว 94 คอลัมน์แถวเป็นรหัสพื้นที่และคอลัมน์เป็นตัวเลขบิต
ตัวอย่างเช่นรหัสพื้นที่ของอักขระ "AH" คือ 16 และหมายเลขบิตคือ 01 และรหัสตำแหน่งคือ 1601
(2) ตัวละครแต่ละตัวประกอบด้วยรหัสพื้นที่ + หมายเลขบิตคิดเป็นสองไบต์ทั้งหมด
แต่ละไบต์คือ 01-94 ซึ่งขัดแย้งกับตัวควบคุมการสื่อสาร 0-31
ดังนั้นเพิ่มรหัสพื้นที่และหมายเลขบิต 32 ตามลำดับเพื่อหลีกเลี่ยงความขัดแย้ง
(3) จากข้างต้นแต่ละไบต์คือ 33-126 ซึ่งขัดแย้งกับการเข้ารหัส ASCII 0-127
ดังนั้นวางตำแหน่งสูงสุดไว้ที่ 1 นั่นคือเพิ่ม 128 เพื่อหลีกเลี่ยงความขัดแย้ง
ดังนั้นในที่สุดแต่ละไบต์ก็คือ 161-254
2. สำเร็จ
หลักการนั้นง่ายมากเพิ่มหรือลบ
ฉันจะโพสต์ฟังก์ชั่นที่ฉันทำเสร็จแล้วโดยตรง
การคัดลอกรหัสมีดังนี้:
-
FunctionChartOQWM (byvalstr)
Dimshex, shigh, slow, ilow, ihigh, sresult
Shex = hex (asc (str)) 'รับการเข้ารหัสรหัสด้านในของตัวละครเช่น B0A1 การเข้ารหัสนี้อยู่ในลำดับที่ถูกต้องและไม่จำเป็นต้องแลกเปลี่ยนบิตสูงและต่ำ
shigh = ซ้าย (Shex, 2) 'ได้รับบิตสูงที่เข้ารหัสเช่น B0
ช้า = ขวา (Shex, 2) 'ได้รับการเข้ารหัสต่ำบิตเช่น A1
'GB2312 ช่วงรหัสภายในคือ & HA1A1-& HFEFE และแต่ละไบต์อยู่ระหว่าง A1-FE
ifnot (shigh> = "a1" และชิพ <= "fe") จากนั้น
chartoqwm = ""
exitfunction
endif
ifnot (slow> = "a1" และ slow <= "fe") จากนั้น
chartoqwm = ""
exitfunction
endif
'รหัสแลกเปลี่ยน GB ใช้ 7 บิตเท่านั้นและตำแหน่งสูงคือ 1 ซึ่งเป็นรหัสด้านใน ในทางกลับกันตำแหน่งสูงคือ 0 และสามารถรับรหัสแลกเปลี่ยนได้
ilow = clng ("& h" & ช้า) -128
ihigh = clng ("& h" & shigh) -128
'รหัสสถานที่ขัดแย้งกับรหัสควบคุม 0-31 ดังนั้นหลังจากเพิ่ม 32 รหัสการแลกเปลี่ยนคือรหัส ในทางกลับกันลบ 32
ilow = ilow-32
ihigh = ihigh-32
'โอเคได้รับรหัสสถานที่แล้ว
sresult = ""
ifihigh <10 แล้ว
sresult = sresult & "0" & cstr (ihigh)
อื่น