f_unicode.c
来自「基于arm9的,usb设备(u盘)的读写操作实现.」· C语言 代码 · 共 172 行
C
172 行
#include "inc.h"
#include "b2u_tables.h"
#include "gb2u_table.h"
u16 MX_Big5ToUnicode(u16 big5)
{
u16 c1, c2;
u32 offset;
u16 unicode;
c1 = (big5>>8)&0x00FF;
c2 = big5&0x00FF;
c2 -= (c2>=0xA1?(0xA1-0x3F):0x40);
offset = ((c1-0x81)*157+c2)*2;
unicode = (((u16)(BtoU[offset+1]))<<8)+(u16)(BtoU[offset]);
return unicode;
}
u16 MX_UnicodeToBig5(u16 unicode)
{
u32 offset;
u16 big5;
if(unicode>0x80)
{
offset = unicode*2;
big5 = (((u16)(UtoB[offset+1]))<<8)+(u16)(UtoB[offset]);
}else{
big5 = unicode;
}
return big5;
}
void MX_UniStrToBig5Str(u16 *unistr, u8 *big5str)
{
u16 i,j;
u16 big5;
i=0;
j=0;
while(unistr[i]!=0x0000)
{
big5=MX_UnicodeToBig5(unistr[i]);
if(big5 > 0x80)
{
big5str[j]=(big5>>8)&0xFF;
big5str[j+1]=(big5&0xFF);
j+=2;
}else{
big5str[j]=(u8)big5;
j++;
}
i++;
}
big5str[j]=0x00;
}
void MX_Big5StrToUniStr(u8 *big5str, u16 *unistr)
{
u16 i,j;
u16 uni;
i=0;
j=0;
while(big5str[i]!=0x00)
{
if(big5str[i]<0x80)
{
unistr[j]=(u16)big5str[i];
i++;
j++;
}else{
uni = (((u16)(big5str[i]))<<8)+(u16)(big5str[i+1]);
unistr[j]=MX_Big5ToUnicode(uni);
i+=2;
j++;
}
}
unistr[j]=0x0000;
}
u16 MX_GB2312ToUnicode(u16 gb2312)
{
u32 offset;
u16 unicode=0;
for(offset=1;offset<sizeof(gb2u_table)/2;)
{
if(gb2312 == gb2u_table[offset])
{
break;
}
else
offset+=2;
}
unicode = gb2u_table[offset-1];
return unicode;
}
u16 MX_UnicodeToGB2312(u16 unicode)
{
u32 offset;
u16 gb2312;
for(offset=0;offset<sizeof(gb2u_table)/2;)
{
if(unicode == gb2u_table[offset])
{
break;
}
else
offset+=2;
}
gb2312 = gb2u_table[offset+1];
return gb2312;
}
u8 MX_UniStrToGB2312Str(u16 *unistr, u8 *gb2312str)
{
u16 i,j;
u16 gb2312;
i=0;
j=0;
while(unistr[i]!=0x0000)
{
if(unistr[i] > 0x80)
{
gb2312=MX_UnicodeToGB2312(unistr[i]);
gb2312str[j]=(gb2312>>8)&0xFF;
gb2312str[j+1]=(gb2312&0xFF);
j+=2;
}else{
gb2312str[j]=unistr[i]&0xff;
j++;
}
i++;
}
gb2312str[j]=0x00;
return j;
}
u8 MX_GB2312StrToUniStr(u8 *gb2312str, u16 *unistr)
{
u16 i,j;
u16 uni;
i=0;
j=0;
while(gb2312str[i]!=0x00)
{
if(gb2312str[i]<0x80)
{
unistr[j]=(u16)gb2312str[i];
i++;
j++;
}else{
uni = (((u16)(gb2312str[i]))<<8)+(u16)(gb2312str[i+1]);
unistr[j]=MX_GB2312ToUnicode(uni);
i+=2;
j++;
}
}
unistr[j]=0x0000; //modified by denny 2006-11-30
return j;
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?