📄 gb2unicode.~cpp
字号:
#include "GB2UNICODE.h"
/* ------------------------------------------------------------------------- */
USGI Word_Unicode2GBcode(USGI Unicode)
/*
查表将一个 UNICODE 码转换为 GB 码并返回,若找不到则返回 0
M.L.Y 2002.4
*/
{
int i, n = (sizeof(GB2312_Unicode))/(sizeof(GB2312_Unicode[0]));
for(i = 0; i < n; i++)
if(GB2312_Unicode[i][1] == Unicode) return GB2312_Unicode[i][0];
return 0;
}
/* ------------------------------------------------------------------------- */
int cvt_Unicode2GB(USGC *strfrom, USGC *strto)
/*
将 UNICODE 码字符串转换为 GB 码字符串,返回转换的汉字数
M.L.Y 2002.4
*/
{
int i, j, k, n, conv;
USGI w;
USGL code_val;
int stat = 0; /* 0: ASCII, 1: #XX, 2: hanzi */
for(i = 0, j = 0, n = 0; ; )
{
conv = NO;
if(strfrom[i] == '#' && strfrom[i+1] >= '0' && strfrom[i+1] <= '9')
{
code_val = 0L;
for(k = 1; ; k++)
{
if(strfrom[i+k] >= '0' && strfrom[i+k] <= '9')
code_val = code_val * 10 + strfrom[i+k] - '0';
else break;
}
if(k <= 6 && code_val <= 0xFFFF && code_val >= 128)
{
w = Word_Unicode2GBcode(code_val);
if(w > 0)
{
conv = YES;
if(stat != 2) strto[j++] = '\'';
stat = 2;
strto[j++] = (w & 0xFF00) >> 8;
strto[j++] = w & 0x00FF;
n++;
i = i + k;
}
}
}
if(conv != YES)
{
if(stat == 2)
{
stat = 0;
strto[j++] = '\'';
}
strto[j++] = strfrom[i];
if(strfrom[i] == NUL) break;
i++;
}
}
for(i = 0, j = 0, k = 0; ; )
{
if(strto[i] == '\'' && strto[i+1] == '\'')
i++; /* 去掉连续的两个单引号 */
else strto[j++] = strto[i];
if(strto[i] == NUL) break;
i++;
}
return n;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -