区位码转汉字机内码
题目:
已知汉字「学」十进制区位码:49 07,遵循 GB2312 编码规则求机内码,最终按照flag{十六进制机内码}格式输出 flag。 转换公式:
- 十进制区、位分别转十六进制,各自加
20H得到国标码高低字节 - 国标码两字节分别加
80H(等价整体加8080H)得到机内码
解题步骤:
前置知识说明
GB2312 编码转换流程:十进制区位码 → 十六进制区位码 → 国标码 → 汉字机内码
- 区位码分为两个独立数字:前数字 = 区码,后数字 = 位码;
- 十六进制后缀 H 代表十六进制数;
- 汉字编码为双字节,高字节对应区码计算结果,低字节对应位码计算结果。
步骤 1:将十进制区码 49 转换为十六进制
转换规则:十进制数除以 16,取商为高位,余数为低位 计算过程: 49 ÷ 16 = 3,余数 = 1 商 3 作为十六进制高位,余数 1 作为十六进制低位 组合得到区码十六进制表示:31H
步骤 2:将十进制位码 7 转换为十六进制
计算过程: 7 ÷ 16 = 0,余数 = 7 商 0 为高位,余数 7 为低位,编码要求每个字节固定两位十六进制,高位不足补 0 组合得到位码十六进制表示:07H
步骤 3:分别计算国标码高低字节,拼接完整国标码
国标码计算公式:十六进制区码 + 20H = 国标码高字节;十六进制位码 + 20H = 国标码低字节
- 国标码高字节(区对应字节): \(31H + 20H = 51H\)
- 国标码低字节(位对应字节): \(07H + 20H = 27H\) 将高字节在前、低字节在后拼接,完整国标码:
5127H
步骤 4:由国标码计算汉字机内码
机内码计算公式:国标码每个字节分别加 80H
- 机内码高字节:国标码高字节 + 80H \(51H + 80H = D1H\)
- 机内码低字节:国标码低字节 + 80H \(27H + 80H = A7H\) 拼接高低字节,最终汉字机内码:
D1A7H
补充整体验证(整体加 8080H)
5127H + 8080H -------- D1A7H
两种计算方式结果完全一致,验证正确。
步骤 5:按题目要求拼接 flag
规定格式:flag{机内码十六进制}最终答案:flag{D1A7}
