一个nds的程序,c语言,移植的gba中日词典的中文显示部分。
目前问题是 字母数字没问题了,但是汉字出现乱码,就是字模位置计算错误,请哪位大佬能抽点时间帮忙看一下,怎么修正。非常感谢。
这里github点com/jjslshn/draw-for-NDS
#define ASCII_BEGIN0x21
#define ASCII_END0x80
#define HZ_PAGE_BEGIN0x81
#define HZ_PAGE_END0xfe
#define HZ_STARTED_CODE0x40
#define HZ_ENDED_CODE0xfe
#define HEAD_SIZE0xa
//**********元常量************/
#define ASCII_FONT_WIDTH 6 //单字节码字模宽
#define ASCII_FONT_HEIGHT 12 //单字节码字模高
#define ASCII_FONT_BYTES 9 //一个单字节码字模占用的空间
#define HZ_FONT_WIDTH 11 //双字节码字模宽
#define HZ_FONT_HEIGHT 11 //双字节码字模高
#define HZ_FONT_BYTES 16 //一个双字节码字模占用的空间
//**********ascii单字节码相关************/
#define ASCII_COUNTS (ASCII_END - ASCII_BEGIN + 1) //字库中单字节码个数
#define ASCII_SIZE (ASCII_COUNTS * ASCII_FONT_BYTES) //字库中单字节码占用总空间
#define ASCII_BASE HEAD_SIZE //计算单字节码字模在字库中位置时用到的偏移常量
//**********GBK双字节码相关**************/
#define HZ_BASE (ASCII_BASE + ASCII_SIZE) //计算双字节码字模在字库中的位置时用到的偏移常量
#define HZ_PAGE_COUNTS (HZ_PAGE_END - HZ_PAGE_BEGIN + 1) //字库一共支持多少个GBK页面的汉字字体
#define HZ_COUNTS_PERPAGE (HZ_ENDED_CODE - HZ_STARTED_CODE +1) //字库中的一页有多少个汉字被支持
#define HZ_COUNTS (HZ_PAGE_COUNTS * HZ_COUNTS_PERPAGE) //字库总共支持多少汉字
#define HZ_PAGE_SIZE (HZ_FONT_BYTES * HZ_COUNTS_PERPAGE) //一页汉字占用的总空间
#define HZ_SIZE (HZ_FONT_BYTES * HZ_COUNTS) //所有汉字占用的总空间
u16 HZ_FONT_LOCATE(const char *byte_ptr){//找到汉字在字库中的首位置
return (HZ_BASE + HZ_FONT_BYTES * ( *( (byte_ptr)+1 ) - HZ_STARTED_CODE + ( *(byte_ptr) - HZ_PAGE_BEGIN ) * HZ_COUNTS_PERPAGE ));
}
目前问题是 字母数字没问题了,但是汉字出现乱码,就是字模位置计算错误,请哪位大佬能抽点时间帮忙看一下,怎么修正。非常感谢。
这里github点com/jjslshn/draw-for-NDS
#define ASCII_BEGIN0x21
#define ASCII_END0x80
#define HZ_PAGE_BEGIN0x81
#define HZ_PAGE_END0xfe
#define HZ_STARTED_CODE0x40
#define HZ_ENDED_CODE0xfe
#define HEAD_SIZE0xa
//**********元常量************/
#define ASCII_FONT_WIDTH 6 //单字节码字模宽
#define ASCII_FONT_HEIGHT 12 //单字节码字模高
#define ASCII_FONT_BYTES 9 //一个单字节码字模占用的空间
#define HZ_FONT_WIDTH 11 //双字节码字模宽
#define HZ_FONT_HEIGHT 11 //双字节码字模高
#define HZ_FONT_BYTES 16 //一个双字节码字模占用的空间
//**********ascii单字节码相关************/
#define ASCII_COUNTS (ASCII_END - ASCII_BEGIN + 1) //字库中单字节码个数
#define ASCII_SIZE (ASCII_COUNTS * ASCII_FONT_BYTES) //字库中单字节码占用总空间
#define ASCII_BASE HEAD_SIZE //计算单字节码字模在字库中位置时用到的偏移常量
//**********GBK双字节码相关**************/
#define HZ_BASE (ASCII_BASE + ASCII_SIZE) //计算双字节码字模在字库中的位置时用到的偏移常量
#define HZ_PAGE_COUNTS (HZ_PAGE_END - HZ_PAGE_BEGIN + 1) //字库一共支持多少个GBK页面的汉字字体
#define HZ_COUNTS_PERPAGE (HZ_ENDED_CODE - HZ_STARTED_CODE +1) //字库中的一页有多少个汉字被支持
#define HZ_COUNTS (HZ_PAGE_COUNTS * HZ_COUNTS_PERPAGE) //字库总共支持多少汉字
#define HZ_PAGE_SIZE (HZ_FONT_BYTES * HZ_COUNTS_PERPAGE) //一页汉字占用的总空间
#define HZ_SIZE (HZ_FONT_BYTES * HZ_COUNTS) //所有汉字占用的总空间
u16 HZ_FONT_LOCATE(const char *byte_ptr){//找到汉字在字库中的首位置
return (HZ_BASE + HZ_FONT_BYTES * ( *( (byte_ptr)+1 ) - HZ_STARTED_CODE + ( *(byte_ptr) - HZ_PAGE_BEGIN ) * HZ_COUNTS_PERPAGE ));
}