最简单的计算GBK偏移量 java版 取模时用到
来源:互联网 发布:新浪短域名 编辑:程序博客网 时间:2024/06/09 10:20
GBK码位分配及顺序
GBK 亦采用双字节表示,总体编码范围为 8140-FEFE,首字节在 81-FE 之间,尾字节在 40-FE 之间,剔除 xx7F 一条线。总计 23940 个码位,共收入 21886 个汉字和图形符号,其中汉字(包括部首和构件)21003 个,图形符号 883 个。
生成的取模字库,是从0开始,对应内码0x8140.关键是还不是按顺序排列,所以要计算偏移量。如果怕麻烦,直接使用unicode 偏移量0对应的就是unicode编码0
1.直接计算 java版
优化版2.0
import java.io.UnsupportedEncodingException;public class GBK {/** * @see 非标准 xx7f 这个他用?来代替,不用减了。 * @author 小黄人软件 * @param code为汉字GBK编码 * @return 返回偏移量 */public static int getGBKIndex2(int code) {//分为三块来减//1. 减0x8140前的所有//2. 减xx00-xx3F 0xxxff 共0x41个字节//3. xx7f 这个他用?来代替,不用减了。 int temp=code - 0x8140- (code/256-0x81)*0x41 ;// if(code%256>0x7f)// temp=temp-1; return temp;}/** * @see 标准 * @author 小黄人软件 * @param code为汉字GBK编码 * @return 返回偏移量 */public static int getGBKIndex(int code) {//分为三块来减//1. 减0x8140前的所有//2. 减xx00-xx3F xx7f xxff 共0x42个//3. 低字节做判断 大于00x7f 减本次的1个xx7f int temp=code - 0x8140- (code/256-0x81)*0x42 ; if(code%256>0x7f) temp=temp-1; return temp;}public static void gbk(char c){//吞 gbk:CDCC 定位14579try {//String gbk = new String("吞".getBytes("GBK"));String gbk = new String(String.valueOf(c).getBytes("GBK")); ////String gbk = new String("丂".getBytes("GBK"));byte[] b=gbk.getBytes();int gbkcode=(int)(256*(b[0]&0xff))+ (int) (b[1]&0xff );int result=getGBKIndex(gbkcode);System.out.println(String.format(gbk+" GBK:0x%04X 定位:%d \r\n",gbkcode, result));} catch (UnsupportedEncodingException e) {// TODO Auto-generated catch blocke.printStackTrace();} }/** * @param args */public static void main(String[] args) {// TODO Auto-generated method stubString str="丂亐0服非";for(int i=0;i<str.length();i++){gbk(str.charAt(i));}}}
输出:
丂 GBK:0x8140 定位:0
亐 GBK:0x8180 定位:63
0 GBK:0xA3B0 定位:6571
服 GBK:0xB7FE 定位:10449
非 GBK:0xB7C7 定位:10394
GBK:0xFE9F 定位:23844
老版1.0
import java.io.UnsupportedEncodingException;public class GBK {public static int getGBKIndex(int code) //返回偏移量 code为汉字GBK编码{//分为三块来减//1. 减0x8140前的所有//2. 减xx00-xx3F 0xxxff 共0x41个字节//3. xx7f 做判断 低字节 少于00x7f 只减之前的 大于则 减之前的+本次的1个字节 int temp=code - 0x8140- (code/256-0x81)*0x41 ; if(code%256<0x7f) temp=temp-(code/256-0x81); else temp=temp-(code/256-0x81)-1; return temp;}/** * @param args */public static void main(String[] args) {// TODO Auto-generated method stub//吞 定位14579 gbk:CDCCtry {//String gbk = new String("吞".getBytes("GBK"));String gbk = new String("丢".getBytes("GBK"));//String gbk = new String("丂".getBytes("GBK"));System.out.println(gbk);byte[] b=gbk.getBytes();System.out.println(String.format("0x%04X ", (int)(256*(b[0]&0xff))+ (int) (b[1]&0xff )));int result=getGBKIndex((int)(256*(b[0]&0xff))+ (int) (b[1]&0xff ));System.out.println(String.format("%02d ", result));} catch (UnsupportedEncodingException e) {// TODO Auto-generated catch blocke.printStackTrace();} }}
2.需要
100kb左右
unsigned int gbk[]={GBK所有字 比如: 丂,丄,丅,丆,丏,丒,丗,丟,丠,両,丣,並,丩,丮,丯,丱} ; //把所有字放入数组中
unsigned int getIndex(unsigned int c)
for(int i=0;i<sizeof(gbk);i++)
{
if(gbk[i]==c)
return i;
}
}
阅读全文
0 0
- 最简单的计算GBK偏移量 java版 取模时用到
- GB2312、GBK字库偏移地址的计算
- 结构体成员偏移量的计算
- iOS计算textField的光标偏移量
- 结构体的偏移量计算
- 计算鼠标偏移量
- 计算鼠标偏移量
- 计算鼠标偏移量
- 计算鼠标偏移量
- 动画平移计算偏移量
- 计算结构体偏移量
- 通过让虚拟机猜数字,学习简单的Java的指针(偏移量)
- C++中struct成员的偏移量的计算
- 计算结构体内成员的内存偏移量
- 计算结构体中偏移量的方法
- 查表指令中计算偏移量的简便方法
- 地址的偏移量
- 偏移量的问题
- div css 网页调试心得(一)
- kendoGrid jquery 数据列表加载
- 大气飞行姿态动力学大作业
- Android消息机制-Handler(二)
- centos设置nginx开机启动
- 最简单的计算GBK偏移量 java版 取模时用到
- libvirt Java API用法连载之libvirt Java API使用详解(四)
- 通过出牌牌组判断斗地主的出牌
- DeepLab笔记(未完待续)
- Android——内容提供者
- java使用jbarcode生成条形码
- 湖南省第七届大学生计算机程序设计竞赛---机器人的指令
- 从心出发,华展云2.0荣耀发布
- 将项目部署到Linux时,提示表不存在?