亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? unicode2local.c

?? 嵌入式系統下的文件管理處理,和基本圖片jpg格式處理原代碼
?? C
字號:
/*-------------------------------------------------*
* $RCSfile: unicode2local.c,v $
* $Date: 2007/01/17 12:28:43 $
* $Author: lanzhu $
* $Log: unicode2local.c,v $
* Revision 1.1.1.1  2007/01/17 12:28:43  lanzhu
* 齊蘭柱 準備一個新的代碼分支
*
* Revision 1.3  2006/12/18 02:14:27  taiyun
* Modify include filename
*
* Revision 1.2  2006/12/12 00:30:51  lanzhu
* 刪除沒有用的程序, 去除 WARNING
*
* Revision 1.1.1.1  2006/12/05 03:01:16  lanzhu
* no message
*
* Revision 1.1.1.1  2006/12/01 09:49:35  lanzhu
* no message
*
* Revision 1.3  2006/09/21 00:53:57  lanzhu
* 添加了 2個函數
*
* Revision 1.2  2006/09/20 12:34:30  lanzhu
* 添加了 local To utf8
*
* Revision 1.1  2006/09/20 02:08:25  lanzhu
* 添加 UTF8 UTF16 UTF32 LOCAL 碼值轉換程序
*
*
*--------------------------------------------------*/
#include "SPMP_define.h"
#include "spca_general.h"

#include "SysUtility.h"

// undef 
#undef INT16
#undef UTF8
#undef UTF16
#undef UTF32
#undef FD32_EUTF8

// define 
#define INT16		SINT16
#define UTF8		UINT8
#define UTF16		UINT16
#define UTF32		UINT32

#define		FD32_EUTF8		(-1)
#define		FD32_EUTF32		(-1)

#define		AP_ERR			(-1)
#define		AP_OK			(0)


/**************************************************************************
 *                   G E N E R A L    C O N S T A N T S                   *
 **************************************************************************/

/**************************************************************************
 *                             M A C R O S                                *
 **************************************************************************/

/**************************************************************************
 *                         D A T A   T Y P E S                            *
 **************************************************************************/

/**************************************************************************
 *                        G L O B A L   D A T A                           *
 **************************************************************************/

#define	CHANGE_BUF_LEN		(0x400)

// 編碼轉換區域的地址指針
static	UINT8 * gpChangeBuf = NULL; 

 /**************************************************************************
 *                 E X T E R N A L   R E F E R E N C E S                  *
 **************************************************************************/

 /**************************************************************************
 *               F U N C T I O N   D E C L A R A T I O N S                *
 **************************************************************************/
extern INT16 char2uni_949(const unsigned char *rawstring, INT16 boundlen, UINT16 *uni);
extern INT16 uni2char_949(const UINT16 uni, unsigned char *out, INT16 boundlen);

static INT16 fd32_utf8to16(const UTF8 *Utf8, UTF16 *Utf16);
static INT16 fd32_utf8to32(const UTF8 *s , UTF32 *Ch);
static INT16 fd32_utf32to16(UTF32 Ch , UTF16 *s);
static INT16 fd32_utf32to8(UTF32 Ch , UTF8 *s);
//static INT16 fd32_utf16to32(const UTF16 *s , UTF32 *Ch);


// 將本地編碼 轉換為 UNICOE 編碼 
INT16 SPMP_local2uni(UINT8 *plocal, UINT8 *puni);
// 將UNICODE 編碼轉換為本地 編碼
INT16 SPMP_uni2local( UINT8 *putf8, UINT8 *pbuf);

INT16 SPMP_GetUniPtr( UINT8 * plocal, UINT8 * *puni);
INT16 SPMP_GetLocalPtr( UINT8 * puni, UINT8 * *plocal);



/************************************************************************/
/*	輸入本地編碼,獲得UTF8 編碼的地址指針

  input:
			plocal	[in]	UINT8 *		本地編碼數據的存放地址
			puni	[out]	UINT8 * *	
  output:
			0 成功, 非0值失敗
  func:
			輸入本地編碼的數據,進行編碼的轉換,返回UTF8編碼的地址指針
  note:

                                                                        */
/************************************************************************/
INT16 SPMP_GetUniPtr( UINT8 * plocal, UINT8 * *puni)
{

	if ((NULL == plocal) || (NULL == puni) ){
		ERROR_REPORT;
		return AP_ERR;
	}

	if (NULL == gpChangeBuf) 
	{
		gpChangeBuf = MEM_ALLOC( CHANGE_BUF_LEN );

		if (NULL == gpChangeBuf) 
		{
			ERROR_REPORT;
			ERROR_STOP;
		}
	}

	// 進行編碼的轉換
	SPMP_local2uni(plocal, gpChangeBuf);

	// 返回UNICODE 編碼的指針	
	*puni = gpChangeBuf;

	// 返回成功
	return AP_OK;
}

/************************************************************************/
/*	輸入 UTF8 的編碼,獲得 Local 編碼的地址指針
  input:
			puin	[in]	UINT8 *		UNICODE 編碼數據的存放地址
			plocal	[out]	UINT8 * *	
  output:
			0 成功, 非0值失敗
  func:
			輸入 UTF8編碼的數據,進行編碼的轉換,返回 LOCAL 編碼的地址指針
  note:
                                                                        */
/************************************************************************/
INT16 SPMP_GetLocalPtr( UINT8 * puni, UINT8 * *plocal)
{
	// 判斷輸入參數是否合法
	if ((NULL == plocal) || (NULL == puni) ){
		ERROR_REPORT;
		return AP_ERR;
	}

	// 判斷是否需要進行內存的申請
	if (NULL == gpChangeBuf) {
		gpChangeBuf = MEM_ALLOC( CHANGE_BUF_LEN );
		if (NULL == gpChangeBuf) 
		{
			ERROR_REPORT;			
			ERROR_STOP;
		}
	}
	
	// 進行編碼的轉換
	SPMP_uni2local( puni, gpChangeBuf );
	
	// 返回UNICODE 編碼的指針	
	*plocal = gpChangeBuf;
	
	// 返回成功
	return AP_OK;	
}

/************************************************************************/
/*	將本地碼轉換為 UTF8 編碼
  input:
			plocal	[in]	本地編碼數據存放的地址指針
			puni	[out]	UTF8 編碼存放的地址指針
  output:
			0 成功,非0值失敗
  func:
			將本地編碼轉換為UTF8編碼		
  note:
                                                                        */
/************************************************************************/
INT16 SPMP_local2uni(UINT8 *plocal, UINT8 *puni)
{
	UINT8	data;
	INT16	ret;
	UINT16	unicode_16;
//	UINT32	unicode_32;	
	
	while (1)
	{
		// 取出一個本地碼
		data = *plocal;

		if (data == '\0'){
			*puni = '\0';
			break;
		}

		// 如果是ASCII碼,直接進行數據的復制 		
		if ( !(data & 0x80) ){
			*puni = data;
			puni++;
			plocal++;
			continue;
		}

		// 進行本地編碼到 UTF16 的轉換
		char2uni_949(plocal, sizeof(UINT16), &unicode_16);
		// 將UTF16轉換為UTF8
		ret = fd32_utf32to8((UINT32)unicode_16, puni);

		// 移動指針
		plocal	+= 2;
		puni	+= ret;
	}

	// 返回成功
	return	0;  
}
/************************************************************************/
/*	將UTF8 的編碼 轉換為 本地編碼
  input:
			putf8	[in]	UTF8編碼數據的地址指針
			pbuf	[out]	轉換后得到的本地碼的地址指針
  otuput:
			0 成功, 非0值失敗
  func:
  note:
                                                                        */
/************************************************************************/
INT16 SPMP_uni2local( UINT8 *putf8, UINT8 *pbuf)
{
	UINT8 data;
	UINT16 unicode_16;
	INT16 ret;

	*pbuf	= '\0';		

	while (1)
	{
		data = *putf8;

		if (data == '\0') 
		{
			*pbuf = '\0';
			break;
		}

		// 如果是ASCII 碼, 直接進行復制
		if ( !(data & 0x80) ) 
		{
			*pbuf = data;
			pbuf++;
			putf8++;
			continue;
		}

		// 不是ASCII, 將UTF8 轉換為UTF16,返回使用的UTF8 的數據的數量	
		ret = fd32_utf8to16(putf8, &unicode_16);
		putf8 += ret;

		// 將UNICOE 轉換為本地編碼
		ret = uni2char_949(unicode_16, pbuf, sizeof(unicode_16));
		pbuf += ret;	
	}

	// 返回成功
	return 0;
}

/************************************************************************/
/*	將UTF8 的編碼轉換為 UTF16
  input:
		putf8	[in]	UTF8 數據的指針
		putf16	[out]	存放得到的UTF16 的數據指針
  output:
		使用的UTF8 的數據長度
  func:
  note:
                                                                        */
/************************************************************************/
static INT16 fd32_utf8to16(const UTF8 *Utf8, UTF16 *Utf16)
{
	UTF32	Ch;
	INT16   Res;

	// 將 UTF8 轉換為 UTF32
	if ((Res = fd32_utf8to32(Utf8 , &Ch)) < 0)
	{
		return FD32_EUTF8;				
	}

	// 將 UTF32 轉換為 UTF16
	fd32_utf32to16(Ch , Utf16);

	return Res;
}

/**************************************************************************/
/* Converts a UTF-8 character to Unicode scalar value (same as UTF-32).  */
/* On success, returns the number of BYTEs taken by the character.       */
/* On failure, returns FD32_EUTF8.                                       */
/*                                                                       */
/* The conversion is done according to the following rules:              */
/*                                                                       */
/*           Scalar                               UTF-8                  */
/* 00000000 00000000 0xxxxxxx <-> 0xxxxxxx                               */
/* 00000000 00000yyy yyxxxxxx <-> 110yyyyy  10xxxxxx                     */
/* 00000000 zzzzyyyy yyxxxxxx <-> 1110zzzz  10yyyyyy  10xxxxxx           */
/* 000uuuuu zzzzyyyy yyxxxxxx <-> 11110uuu  10uuzzzz  10yyyyyy  10xxxxxx */
/*                                                                       */
/* NOTE: For optimization reasons, it is assumed that this function is   */
/* not called when the UTF-8 character is not multi-byte. In this case   */
/* the caller should process the single-byte character directly.         */
/**************************************************************************/
static INT16 fd32_utf8to32(const UTF8 *s , UTF32 *Ch)
{
	// 2 字節的情形	
	if ((*s & 0xE0) == 0xC0)
	{
	  *Ch = (*s++ & 0x1F) << 6;
	  if ((*s & 0xC0) != 0x80) return FD32_EUTF8;		
	  *Ch += *s++ & 0x3F;
	  return 2;					
	}

	// 3 字節情形
	if ((*s & 0xF0) == 0xE0)
	{
		*Ch = (*s++ & 0x0F) << 12;
		if ((*s & 0xC0) != 0x80) return FD32_EUTF8;
		*Ch += (*s++ & 0x3F) << 6;
		if ((*s & 0xC0) != 0x80) return FD32_EUTF8;
		*Ch += *s++ & 0x3F;
		return 3;
	}

	// 4 字節的情形
	if ((*s & 0xF8) == 0xF0)
	{
		*Ch = (*s++ & 0x07) << 18;
		if ((*s & 0xC0) != 0x80) return FD32_EUTF8;
		*Ch = (*s++ & 0x3F) << 12;
		if ((*s & 0xC0) != 0x80) return FD32_EUTF8;
		*Ch += (*s++ & 0x3F) << 6;
		if ((*s & 0xC0) != 0x80) return FD32_EUTF8;
		*Ch += *s++ & 0x3F;
		return 4;
	}

	return FD32_EUTF8;
}


/**************************************************************************/
/* Converts a Unicode scalar value (same as UTF-32) to UTF-8.         	 */
/* On success, returns the number of BYTEs taken by the character.       */
/* On failure, returns FD32_EUTF32 (invalid scalar value).               */
/* See fd32_utf8to32 comments for conversion details.                    */
/* NOTE: For optimization reasons, it is assumed that this function      */
/* is not called when the UTF-8 character is not multi-byte. In this     */
/* case the caller should process the single-byte character directly.    */
/**************************************************************************/
static INT16 fd32_utf32to8(UTF32 Ch , UTF8 *s)
{
	if (Ch < 0x000800)
	{
		*s++ = (UTF8) (0xC0 + ((Ch & 0x0007C0) >> 6));
		*s   = (UTF8) (0x80 +  (Ch & 0x00003F));
		return 2;
	}

	if (Ch < 0x010000)
	{
		*s++ = (UTF8) (0xE0 + ((Ch & 0x00F000) >> 12));
		*s++ = (UTF8) (0x80 + ((Ch & 0x000FC0) >> 6));
		*s   = (UTF8) (0x80 +  (Ch & 0x00003F));
		return 3;
	}

	if (Ch < 0x200000)
	{
		*s++ = (UTF8) (0xF0 + ((Ch & 0xFC0000) >> 18));
		*s++ = (UTF8) (0x80 + ((Ch & 0x03F000) >> 12));
		*s++ = (UTF8) (0x80 + ((Ch & 0x000FC0) >> 6));
		*s   = (UTF8) (0x80 +  (Ch & 0x00003F));
		return 4;
	}

	return (-1);
}


/**************************************************************************/
/* Converts a UTF-16 character to Unicode scalar value (same as UTF-32).  */
/* On success, returns the number of WORDs taken by the character.        */
/* On failure, returns FD32_EUTF16.                                       */
/*                                                                        */
/* The conversion is done according to the following rules:               */
/*                                                                        */
/*           Scalar                              UTF-16                   */
/* 00000000 zzzzyyyy yyxxxxxx <-> zzzzyyyy yyxxxxxx                       */
/* 000uuuuu zzzzyyyy yyxxxxxx <-> 110110ww wwzzzzyy  110111yy yyxxxxxx    */
/* where wwww = uuuuu - 1.                                                */
/**************************************************************************/
/* Converts a Unicode scalar value (same as UTF-32) to UTF-16.     		  */
/* On success, returns the number of WORDs taken by the character.        */
/* On failure, returns FD32_EUTF32 (invalid scalar value).                */
/* See fd32_utf16to32 comments for conversion details.                    */
/**************************************************************************/
static INT16 fd32_utf32to16(UTF32 Ch , UTF16 *s)
{
	// 小于 65536 的情形
	if (Ch < 0x010000)
	{
		*s = (UTF16) Ch;
		return 1;
	}
	
	// 大于 65536 的情形
	if (Ch < 0x200000)
	{
		*s++ = (UTF16) (0xD800 + (((Ch >> 16) - 1) << 6) + ((Ch & 0x00FC00) >> 2));
		*s   = (UTF16) (0xDC00 + (Ch & 0x0003FF));
		return 2;
	}
	
	return FD32_EUTF32;
}

/************************************************************************/
/*			
				程序編譯時發現沒有用到的BUG
                                                                        */
/************************************************************************/

#if 0

/**************************************************************************/
/* Converts a UTF-16 character to Unicode scalar value (same as UTF-32).  */
/* On success, returns the number of WORDs taken by the character.        */
/* On failure, returns FD32_EUTF16.                                       */
/*                                                                        */
/* The conversion is done according to the following rules:               */
/*                                                                        */
/*           Scalar                              UTF-16                   */
/* 00000000 zzzzyyyy yyxxxxxx <-> zzzzyyyy yyxxxxxx                       */
/* 000uuuuu zzzzyyyy yyxxxxxx <-> 110110ww wwzzzzyy  110111yy yyxxxxxx    */
/* where wwww = uuuuu - 1.                                                */
/**************************************************************************/
static INT16 fd32_utf16to32(const UTF16 *s , UTF32 *Ch)
{
	if ((*s & 0xFC00) != 0xD800)
	{
		*Ch = *s;
		return 1;
	}
	
	*Ch = ((*s++ & 0x03FF) << 10) + 0x010000;
	
	if ((*s & 0xFC00) != 0xDC00)
	{
		return (-1);	  
	}
	
	*Ch += *s & 0x03FF;
	return 2;
}

#endif


?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
中文字幕精品综合| 捆绑变态av一区二区三区| 一区二区三区在线视频免费观看| 不卡的av电影在线观看| 另类调教123区| 亚洲成人精品影院| 国产区在线观看成人精品| 精品粉嫩aⅴ一区二区三区四区| 欧美国产成人精品| 日韩av中文字幕一区二区三区| 国产成人免费xxxxxxxx| 日韩欧美一区中文| 亚洲sss视频在线视频| 不卡视频在线看| 日韩一级完整毛片| 91精品欧美久久久久久动漫| 麻豆精品一区二区综合av| 久久精品水蜜桃av综合天堂| 日韩欧美成人一区二区| 欧美日韩精品一区二区三区四区 | 中文字幕在线不卡| 亚洲一区二区三区美女| 97se亚洲国产综合在线| 国产视频在线观看一区二区三区 | 亚洲精品成人精品456| 成人免费看片app下载| 亚洲精品一区二区三区福利| 99久久精品一区二区| 免费看欧美女人艹b| 石原莉奈一区二区三区在线观看 | 精品久久久久久综合日本欧美 | 国产精品视频线看| 91国产成人在线| 在线免费观看成人短视频| 欧美中文字幕亚洲一区二区va在线| 91高清在线观看| 欧美日韩视频不卡| 日本aⅴ亚洲精品中文乱码| 欧美电影影音先锋| 蜜臀国产一区二区三区在线播放| 精品国产sm最大网站| 国产精品亚洲第一| ...xxx性欧美| 欧美做爰猛烈大尺度电影无法无天| 亚洲成av人片一区二区三区| 久久婷婷国产综合国色天香| 久久青草欧美一区二区三区| 亚洲猫色日本管| 国产福利不卡视频| 欧美人xxxx| 久久精品一区二区三区四区| 亚洲国产欧美日韩另类综合| 国精产品一区一区三区mba视频| 99热99精品| 精品国产乱码久久久久久牛牛| 日韩专区欧美专区| 欧美高清视频www夜色资源网| 国产精品女同互慰在线看| 欧美亚洲一区二区在线| 国产精品99久| 午夜精品爽啪视频| 国产午夜精品久久久久久免费视| 欧美专区日韩专区| 国产精品资源网站| 国产寡妇亲子伦一区二区| 麻豆一区二区在线| 欧美在线综合视频| 樱花草国产18久久久久| 成人av一区二区三区| 久久久蜜桃精品| 精品一区二区三区在线播放 | 欧美在线免费播放| 亚洲欧美在线视频观看| 91啪九色porn原创视频在线观看| 久久先锋影音av| 亚洲国产毛片aaaaa无费看| 中文字幕精品三区| 精品国产污污免费网站入口 | 欧美精品一区二区三区视频| 91国产福利在线| 欧美福利一区二区| 欧美一区二区免费观在线| 亚洲国产日韩在线一区模特| 在线视频中文字幕一区二区| 悠悠色在线精品| 337p亚洲精品色噜噜| 美女诱惑一区二区| 久久久一区二区| 色综合中文字幕国产| 日本欧美在线观看| 欧美精品一区二区三区一线天视频| 精品亚洲成a人| 欧美激情艳妇裸体舞| 五月婷婷另类国产| 中文字幕制服丝袜成人av | 国产成人综合在线| 国产成人亚洲精品青草天美| 国产精品一区三区| 播五月开心婷婷综合| 91亚洲精华国产精华精华液| 欧美96一区二区免费视频| 日韩午夜电影av| 在线观看亚洲精品| 成人黄色在线视频| 欧美一级黄色大片| 色综合天天性综合| 激情小说欧美图片| 亚洲一级二级在线| 国产精品乱人伦中文| 欧美一区二区三区免费| 色综合天天综合网国产成人综合天| 免费成人在线视频观看| 亚洲一区日韩精品中文字幕| 日本黄色一区二区| 欧美成人一区二区三区在线观看| 国产精品天天看| 麻豆一区二区三区| 在线精品国精品国产尤物884a| 欧美精品一区二区三区高清aⅴ| 亚洲欧洲精品一区二区三区不卡| 日本不卡中文字幕| 色综合久久久久| 欧美激情在线观看视频免费| 婷婷六月综合网| 在线观看日产精品| 欧美精品一卡两卡| 欧美一区二区三区啪啪| 51久久夜色精品国产麻豆| 欧美色图在线观看| 欧美日韩久久久一区| 欧美日韩一卡二卡| 欧美一区二区三区视频在线| 日韩一区二区三区av| 久久综合一区二区| **性色生活片久久毛片| 色综合视频一区二区三区高清| 成人av资源在线观看| 午夜在线成人av| 国产99一区视频免费| 久久久久久久综合日本| 蜜臀av亚洲一区中文字幕| 欧美视频一区二区三区四区| 日韩美女久久久| 91丨porny丨最新| 中文字幕一区二区三区四区不卡| 国产成人超碰人人澡人人澡| 久久综合99re88久久爱| 成人性色生活片免费看爆迷你毛片| 成人免费va视频| 色婷婷国产精品| 久久综合九色综合97婷婷女人| 亚洲日本在线观看| 麻豆国产精品官网| 成人一区二区三区| 欧美日韩成人在线| 中文字幕精品—区二区四季| 亚洲一区在线观看视频| 美日韩一级片在线观看| 91麻豆国产福利精品| 精品国产自在久精品国产| 亚洲一二三四在线| 91丨九色丨国产丨porny| 精品久久一区二区三区| 2023国产精品自拍| 成人精品电影在线观看| 午夜精品一区二区三区免费视频 | 日韩视频永久免费| 99精品黄色片免费大全| 日韩专区一卡二卡| 国产精品女同一区二区三区| 欧美猛男gaygay网站| 一区二区三区91| 欧美日韩亚洲综合一区二区三区 | 日韩美女视频一区二区| 国产精品羞羞答答xxdd| 91精品国产综合久久久蜜臀粉嫩| 亚洲国产美女搞黄色| 欧美午夜精品理论片a级按摩| 日韩一区在线免费观看| 成人免费不卡视频| 国产精品热久久久久夜色精品三区| 韩国成人在线视频| 精品国产免费人成电影在线观看四季| 婷婷夜色潮精品综合在线| 欧美日韩国产一级片| 免费在线观看成人| 国产精品综合一区二区| 亚洲日本青草视频在线怡红院| 欧美电影免费观看高清完整版| 91亚洲午夜精品久久久久久| 国产激情视频一区二区三区欧美 | 免费av成人在线| 视频一区免费在线观看| 免费av成人在线| 国产乱码精品一品二品| 久久久国产一区二区三区四区小说| 久久精品国产免费| 国产欧美一区二区精品仙草咪 | 亚洲午夜激情网页| 日韩精品在线看片z|