main.c

来自「bbs server linux平台下软件源码」· C语言 代码 · 共 77 行

C
77
字号
#include <stdio.h>typedef unsigned int (conv_func_t) (unsigned int);extern conv_func_t fromgb;extern conv_func_t togb;extern conv_func_t frombig;extern conv_func_t tobig;extern conv_func_t s2t;extern conv_func_t t2s;extern conv_func_t v2z;static unsigned int nochar;int isgb2312(unsigned int gbchar){    unsigned char lead = (gbchar >> 8) & 0xff;    unsigned char trail = (gbchar) & 0xff;    return (lead >= 0xa1 && lead <= 0xfe && trail >= 0xa1 && trail <= 0xfe);}int main(int argc, char *argv[]){    unsigned char ch;    unsigned char lead = 0;    int c;    conv_func_t *fromfunc;    conv_func_t *tofunc;    conv_func_t *stfunc;    fromfunc = frombig;    tofunc = togb;    stfunc = t2s;    while ((c = getopt(argc, argv, "r")) != -1) {        switch (c) {        case 'r':            fromfunc = fromgb;            tofunc = tobig;            stfunc = s2t;            break;        default:            fprintf(stderr, "usage: %s -r\n", argv[0]);            fprintf(stderr, "\t-r: From GB to BIG5 (default: from BIG5 to GB)\n");            return -1;        }    }    nochar = tofunc(0);    ch = getchar();    while (!feof(stdin)) {        if (lead) {            unsigned int tmpchar = fromfunc((lead << 8) | ch);            unsigned int mb = tofunc(stfunc(tmpchar));            unsigned int mbvz = tofunc(stfunc(v2z(tmpchar)));            if (mb == nochar)                mb = mbvz;            else if (tofunc == togb && mbvz != nochar && !isgb2312(mb))                mb = mbvz;            putchar((mb >> 8) & 0xff);            putchar(mb & 0xff);            lead = 0;        } else if ((ch & 0x80)) {            lead = ch;        } else            putchar(ch);        ch = getchar();    }    if (lead) {        putchar((nochar >> 8) & 0xff);        putchar(nochar & 0xff);    }    return 0;}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?