小枫客栈

淡泊以明志,宁静以致远!

« 流浪计算机专业就业方向 »

E6 五笔输入法词库解码程序

FOX 已经停止更新五笔、智拼和笔画词库了,下面给出词库的解码程序。

#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <iconv.h>
using namespace std;
#define CODE_LENGTH 8
#define WORD_LENGTH 4
typedef struct sDictRecord{
  char incode[CODE_LENGTH];
  char words[WORD_LENGTH];
} DicRec;
void DicRec_print(DicRec *rec,iconv_t cvt,FILE *fTxt){

 

    if(cvt==(iconv_t)-1){
        printf("failed to initialize converter.");
        exit(3);
    }
    char ic[CODE_LENGTH+1]={'\0'};
    char w[WORD_LENGTH+1]={'\0'};

    const char *pin=(const char *)rec->words;
    char *pout=(char *)w;

    memcpy(ic,rec->incode,CODE_LENGTH);
    size_t
        in_left = strlen( rec->words ),
        out_left = WORD_LENGTH + 1;
    w[WORD_LENGTH]='\0';
    iconv(cvt,
        &pin, &in_left,
        &pout, &out_left);
    printf("%s - %s\n",ic,w);
    fprintf(fTxt,"%s,%s\n",ic,w);


}
int main()
{
    DicRec record;
    size_t rsize=sizeof(DicRec);
    int err;
    iconv_t cvt=iconv_open("GBK","UTF-16LE");

    FILE *fDat=fopen("wb.dat","rb");
    FILE *fTxt=fopen("wb.txt","wt");
    if(fDat==NULL || fTxt==NULL){
        printf("failed to open the file.");
        exit(1);
    }
    printf("size of record: %u\n", rsize);
    while(fread(&record,rsize,1,fDat)>0){

        DicRec_print(&record,cvt,fTxt);

    }


    printf("\n");
    fclose(fTxt);
    fclose(fDat);
    iconv_close(cvt);
    return 0;
}
 
 

  • 相关文章:

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

日历

最新评论及回复

最近发表

Copyright © 2006 - 2012 Xiaofeng. All Rights Reserved.
豫ICP备07012919号