同樣遇到字節對齊的問題,問題就是:
漢字取模后,只有一個漢字無法顯示,這個漢字是“過”這個字。存在結構體中用漢字來當索引,檢索取模后的十六進制數。結構體如下:
typedef struct
{
unsigned char Index[2];
unsigned char Msk[128];
}typFNT_GB32;
//#pragma pack()
const typFNT_GB32 code tfont32[]={
"未",0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x80,0x03,0x00,0x00,0x80,0x01,0x00,0x00,0x80,0x01,0x00,0x00,0x80,0x01,0x00,0x00,0x80,0x81,0x01,0xC0,0xFF,
0xFF,0x03,0x00,0x80,0x01,0x00,0x00,0x80,0x01,0x00,0x00,0x80,0x01,0x00,0x00,0x80,0x01,0x00,0x00,0x80,0x01,0x00,0x00,0x80,0x01,0x0C,0xF8,0xFF,0xFF,0x1F,0x00,0xE0,0x03,0x00,
0x00,0xE0,0x05,0x00,0x00,0xB0,0x0D,0x00,0x00,0xB8,0x09,0x00,0x00,0x98,0x11,0x00,0x00,0x8C,0x31,0x00,0x00,0x86,0x61,0x00,0x00,0x83,0xC1,0x01,0x80,0x81,0x81,0x03,0x60,0x80,
0x01,0x0F,0x30,0x80,0x01,0x3E,0x08,0x80,0x01,0x0C,0x00,0x80,0x01,0x00,0x00,0x80,0x01,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,/*"未",0*/
通過分析發現,當結構內存儲的是“過”這個字的時候是無法顯示的。調試發現,Index[2]數組中的Index[1]取值不完整。如下:
k=10
indx0=0xd5
indx1=0xcf
k=11
indx0=0xb9
indx1=0x0
k=12
indx0=0xc7
indx1=0xb7
上邊的“k=11”這個就是“過”這個漢字的序號,打印出來后居然是“indx1=0x0”,缺少數據,正常應該是“indx1=0xfd”。即:indx0=0xb9,indx1=0xfd。正好對應GB2312碼表中“過”這個漢字十六進制編碼0xb9fd。
請各位大神指教,如何解決。問題是:只有這一個漢字這樣,其它漢字沒有問題。從上述打印出來的k=10、k=12的索引漢字就能看出來。 |