#include <stdio.h>
#include <stdlib.h>
static unsigned int gb2312_0_char_offset (const unsigned char* mchar)
{
int area = mchar [0] - 0xA1;
printf("[%s]\n", __FUNCTION__);
if (area < 9) {
return (area * 94 + mchar [1] - 0xA1);
}
else if (area >= 15)
return ((area - 6)* 94 + mchar [1] - 0xA1);
return 0;
}
static void to_show_hzk_ch(unsigned char * buffer){
unsigned char key[8] = {0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01 };
int i = 0;
int j = 0;
int k = 0;
int flag;
for(k=0; k<32; k++){
if(k%8 == 0){
printf("\n");
}
printf("0x%02X,", buffer[k]);
}
printf("\n\n");
printf(" ");
for(k=0; k<16; k++){
printf("%d", (k)%8+1);
}
printf("\n");
for(k=0; k<16; k++){
printf("%2d ", k+1);
for(j=0; j<2; j++){
for(i=0; i<8; i++){
flag = buffer[k*2+j]&key[i];
printf("%s", flag?"O":" ");
}
}
printf("\n");
}
printf("\n");
printf("\n");
}
int main(void)
{
FILE* fphzk = NULL;
int offset;
int flag;
unsigned char buffer[32];
fphzk = fopen("song-16-gb2312.bin", "rb");
if(fphzk == NULL){
fprintf(stderr, "error hzk16\n");
return 1;
}
offset = 32 * gb2312_0_char_offset("国");
fseek(fphzk, offset, SEEK_SET);
fread(buffer, 1, 32, fphzk);
to_show_hzk_ch(buffer);
fclose(fphzk);
fphzk = NULL;
return 0;
}
执行结果
[gb2312_0_char_offset]
0x00,0x04,0x7F,0xFE,0x40,0x04,0x40,0x24,
0x5F,0xF4,0x41,0x04,0x41,0x04,0x4F,0xE4,
0x41,0x04,0x41,0x44,0x41,0x24,0x5F,0xF4,
0x40,0x04,0x40,0x04,0x7F,0xFC,0x40,0x04,
1234567812345678
1 O
2 OOOOOOOOOOOOOO
3 O O
4 O O O
5 O OOOOOOOOO O
6 O O O
7 O O O
8 O OOOOOOO O
9 O O O
10 O O O O
11 O O O O
12 O OOOOOOOOO O
13 O O
14 O O
15 OOOOOOOOOOOOO
16 O O