?? untogb.c
字號:
#include "COMM.H"
#include "UnicodeToGB2312.h"
//UNICODE 與 GB碼轉(zhuǎn)換部分代碼
//正點(diǎn)原子@SCUT
//CHECK:09/06/08
u16 UnicodeToGB2312(u16 unicode)//用二分查找算法
{
int mid, low, high, len;
len = sizeof(UnicodeToGB2312_Tab)/sizeof(UnicodeToGB2312_Tab[0]);
low = 0;
high = len - 1;
if( (unicode >= 0x20 && unicode <= 0x5b) || (unicode >= 0x5d && unicode <= 0x7e))
return unicode;
while(low <= high)
{
mid = (low + high) / 2;
if(UnicodeToGB2312_Tab[mid][0] > unicode)
high = mid - 1;
else if(UnicodeToGB2312_Tab[mid][0] < unicode)
low = mid + 1;
else
return UnicodeToGB2312_Tab[mid][1];
}
return 0 ; //沒找到
}
//注意,這個(gè)程序?qū)τ趗nicode碼并不是所有的都能解決
//這就導(dǎo)致了文件名里面不能有unicode的字符
//代碼轉(zhuǎn)換unit code-> gb2312
void UniToGB(u8 *pbuf)
{
unsigned int code;
unsigned char i,m=0;
for(i=0;i<80;i++)//最長80個(gè)字符
{
code= pbuf[i*2+1]*256+pbuf[i*2];
if((code==0)||(code==0xffff))break;
if((code&0xff00)==0)//字母
{
if((code>=0x20)&&(code<=0x7e))
{
pbuf[m++]=(unsigned char)code;
}else pbuf[m++]='?';//無法識別的用?代替
continue;
}
if(code>=0x4e00) //是漢字
{
code=UnicodeToGB2312(code);//把unicode轉(zhuǎn)換為gb2312
pbuf[m++]=code>>8;
pbuf[m++]=(u8)code;
}else pbuf[m++]='?';//無法識別的用?代替
}
pbuf[m]='\0';//添加結(jié)束符號
}
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -