據我所知,linux下char類型為1個位元組,wchar_t為4個位元組,而unicode為2個位元組。
c庫有提供wchar_t類型的函數,如wcslen,wcscpy等,所以,對char和wchar_t類型的處理在linux上沒有任何阻礙。問題是,我們公司引擎的API都是基於unicode,找不到處理unicode類型的函數,只好自己實現:
char* Unicode2Char( UNICODE* str, int len )
{
int i;
static char tmp[256];
for( i = 0; i < len; i++ )
tmp[i] = (gchar)str[i];
tmp[i] = 0;
return tmp;
}
char* Wchar2Char( wchar_t* str )
{
int i = 0;
int len = wcslen(str);
static char tmp[256];
for( i = 0; i < len; i++ )
tmp[i] = (gchar)str[i];
tmp[i] = 0;
return tmp;
}
wchar_t* Char2Wchar( BOOL needmalloc, char* str )
{
wchar_t* tmp;
static wchar_t tmparray[256];
unsigned int i = 0;
if( needmalloc )
{
tmp = (wchar_t *)malloc( (strlen(str) + 1)*2 );
for( i = 0; i < strlen(str); i++ )
tmp[i] = (wchar_t)str[i];
tmp[i] = 0;
return tmp;
}
else
{
for( i = 0; i < strlen(str); i++ )
tmparray[i] = (wchar_t)str[i];
tmparray[i] = 0;
return tmparray;
}
}
UNICODE* Char2Unicode( BOOL needmalloc, char* str )
{
UNICODE* tmp;
static UNICODE tmparray[256];
unsigned int i = 0;
if( needmalloc )
{
tmp = (UNICODE *)malloc( (strlen(str) + 1)*2 );
for( i = 0; i < strlen(str); i++ )
tmp[i] = (UNICODE)str[i];
tmp[i] = 0;
return tmp;
}
else
{
for( i = 0; i < strlen(str); i++ )
tmparray[i] = (UNICODE)str[i];
tmparray[i] = 0;
return tmparray;
}
}