www.pudn.com > arm_uDisk.rar > F_Unicode.c


 
#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 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; 
}