帮我看看这个程序,谢谢
bool GB2312_Generate(char *sFileName)
{
FILE *fp;
unsigned int i,j;
if((fp=fopen(sFileName,"wt"))==NULL)
return false;//fail while opening the file
for(i=161;i<255;i++)
for(j=161;j<255;j++)
fprintf(fp,"%c%c,%d,%d\n",i,j,i,j);
fclose(fp);
return true;
}
最近看了一个C++程序。
这个是一个分词上的程序片断,哪位大侠能够详细的介绍一下,谢谢
问题点数:50、回复次数:6Top
1 楼LoveYouJustOneDay(哈哈)回复于 2005-08-02 23:15:20 得分 10
for(i=161;i<255;i++)
for(j=161;j<255;j++)
fprintf(fp,"%c%c,%d,%d\n",i,j,i,j);
将中文等字符写入文件
你运行一下就知道了
中文都是占2字节的
Top
2 楼kongkongyu(lulu)回复于 2005-08-03 08:05:24 得分 0
谢谢,确实是将中文字符写入文件,
但是fprintf(fp,"%c%c,%d,%d\n",i,j,i,j); 这一行如何解释?怎么变成了中文。谢谢Top
3 楼megaboy(飞天御剑流之杀神一刀斩)回复于 2005-08-03 08:23:58 得分 40
中文的编码方式是使用两个字节表示,高字节表示区号,低字节表示位号,也就是区位码。共有94个区,每个区又有94个位,区号和位号都从0x21开始,一级汉字区号从0x30开始到0x57,二级汉字区号从0x58开始到0x77,这是早期的国标码的编码方法。现在的国标码编码方式是在原来的编码方法加上0x8080得到,也就是说两个字节的最高位恒定为1。最高位(区号)0x21加上0x80就是0xA1,转换成十进制就是161,上面代码的循环就是从161这个区号开始的。
fprintf(fp,"%c%c,%d,%d\n",i,j,i,j);通过%c%c把中文的两个字节分别输入文件fp里面。Top
4 楼megaboy(飞天御剑流之杀神一刀斩)回复于 2005-08-03 08:40:49 得分 0
再补充一下,下面这段循环是把整个国标码的字符及其区位码都输出到文件fp里面:
for(i=161;i<255;i++)
for(j=161;j<255;j++)
fprintf(fp,"%c%c,%d,%d\n",i,j,i,j);
Top
5 楼yc0188(守护瓶(萍))回复于 2005-08-03 08:58:52 得分 0
可能是 sFileName 给的有问题...
比如没有终结符等....
Top
6 楼kongkongyu(lulu)回复于 2005-08-03 09:06:38 得分 0
感谢,给分Top




