參考資訊:
http://billor.chsh.chc.edu.tw/php/Tools/qBig5.php
http://programmer-club.com.tw/ShowSameTitleN/cb/5801.html
https://github.com/rofl0r/microwindows/blob/master/src/engine/font_hzk.c
main.c
#include <stdio.h> #include <stdint.h> #include <stdlib.h> #include <unistd.h> #include <fcntl.h> #include <sys/types.h> #include <sys/stat.h> int is_big5(unsigned int val) { if ((val >= 0xa140 && val <= 0xa3bf) || (val >= 0xa440 && val <= 0xc67e) || (val >= 0xc6a1 && val <= 0xc8d3) || (val >= 0xc940 && val <= 0xf9fe)) { return 1; } return 0; } int main(int argc, char **argv) { FILE *f; unsigned int high, low; unsigned char top[30] = {0}; unsigned int font = 0xae7b; if ((is_big5(font)) == 0) { printf("not big5 !\n"); return -1; } f = fopen("stdfont.15", "rb"); low = font & 0xff; high = 157 * (((font >> 8) & 0xff) - 164); if (low < 127) { low -= 64; } else { low -= 98; } fseek(f, (high + low) * 30, 0); fread(top, 30, 1, f); fclose(f); int x, y, z, t, cnt = 0; for (y = 0; y < 15; y++) { for (z = 0; z < 2; z++) { t = top[cnt++]; for (x = 0; x < 8; x++) { if (t & 0x80) { printf("1"); } else { printf(" "); } t <<= 1; } } printf("\n"); } return 0; }
完成