关于汉字区位内码的问题

sugars1717 2009-09-10 09:33:00
from "freepy"中的 "gb2big"

static unsigned char GtoB[] = {
0xa1,0x40, 0xa1,0x42, 0xa1,0x43, 0xa1,0x4f, 0xa1,0xc2, 0xa1,0xbc, 0xa1,0x4c,
0xa1,0xb2, 0xa1,0xbc, 0xa2,0x77, 0xa1,0xe3, 0xa1,0xfc, 0xa1,0x4b, 0xa1,0xa5,
0xa1,0xa6, 0xa1,0xa7, 0xa1,0xa8, 0xa1,0x65, 0xa1,0x66, 0xa1,0x71, 0xa1,0x72,
0xa1,0x6d, 0xa1,0x6e, 0xa1,0x75, 0xa1,0x76, 0xa1,0x79, 0xa1,0x7a, 0xa1,0xbc,
0xa1,0xbc, 0xa1,0x69, 0xa1,0x6a, 0xa1,0xd3, 0xa1,0xd1, 0xa1,0xd2, 0xa1,0x4a,
0xa3,0x4e, 0xa1,0xbc, 0xa3,0x55, 0xa3,0x53, 0xa1,0xe5, 0xa1,0xe4, 0xa1,0xbc,
... ...
};

#define GtoB_bad1 0xa1
#define GtoB_bad2 0xbc

int gb2big(char *pszBuf)
{
unsigned char c1,c2;
int i,nLen,nPos;
char *pstr;

pstr=pszBuf;
nLen=strlen(pstr);
i=0;
while (i<nLen ) {
if (!IsDBCSLeadByte((BYTE)*pstr)) {
pstr++;
i++;
continue;
}
c1=*pstr;
c2=*(pstr+1);
if ((c2 >= 0xa1) && (c2 <= 0xfe)) {
if ((c1 >= 0xa1) && (c1 <= 0xa9)) {
nPos = ((c1 - 0xa1) * 94 + (c2 - 0xa1)) * 2;
*pstr = GtoB[nPos++];
*(pstr+1) = GtoB[nPos];
}
else if ((c1 >= 0xb0) && (c1 <= 0xf7)) {
nPos = ((c1 - 0xb0 + 9) * 94 + (c2 - 0xa1)) * 2;
*pstr = GtoB[nPos++];
*(pstr+1) = GtoB[nPos];
}
else {
*pstr = (char)GtoB_bad1;
*(pstr+1) = (char)GtoB_bad2;
}
}
else {
*pstr = (char)GtoB_bad1;
*(pstr+1) = (char)GtoB_bad2;
}
pstr += 2;
i += 2;
}
return 1;
}

那个数组怎么理解啊?
...全文
112 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
用户 昵称 2009-09-14
  • 打赏
  • 举报
回复
那就是一个转换查表而已。

首先这是一个gb到big5的转换表,一个汉字用gb表示与用big5表示是不同的,而且有一定规律,如果没有windows的支持,就需要自己查表了。

16,551

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Creator Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧