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

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

?? utf8.h

?? utf8編碼
?? H
字號:
#ifndef __DNC_UTF8_H__
#define __DNC_UTF8_H__
//##############################################################################
//The dnc Library
//Copyright (c) 2005 Dreamsoft 趙純華
//Last update: 2005-1-10
//UTF8轉換函數
//##############################################################################
//
#ifndef __DNC_DEFINE_H__
#include "define.h"
#endif
#ifndef __DNC_ARRAY_H__
#include "array.h"
#endif
#include <string>


namespace dnc{
	DNC_DECLARE size_t ANSIToUTF8(castr srcData,size_t srcCount,ustr destData,size_t destCount);
	DNC_DECLARE size_t UTF8ToANSI(custr srcData,size_t srcCount, astr destData,size_t destCount);
	DNC_DECLARE size_t ANSIToUNICODE(castr srcData,size_t srcCount, wstr destData,size_t destCount) ;
	DNC_DECLARE size_t UNICODEToANSI(cwstr srcData,size_t srcCount,astr destData,size_t destCount) ;
	DNC_DECLARE size_t UNICODEToUTF8(cwstr srcData,size_t srcCount,ustr destData,size_t destCount) ;
	DNC_DECLARE size_t UTF8ToUNICODE(custr srcData,size_t srcCount, wstr destData,size_t destCount) ;

	inline size_t ANSIToUTF8(const Array<achar> &src,Array<uchar> &dest){
		return ANSIToUTF8(src.data(),src.size(),dest.data(),dest.size());
	}
	inline size_t UTF8ToANSI(const Array<uchar> &src,Array<achar> &dest){
		return UTF8ToANSI(src.data(),src.size(),dest.data(),dest.size());
	}
	inline size_t UNICODEToUTF8(const Array<wchar> &src,Array<uchar> &dest){
		return UNICODEToUTF8(src.data(),src.size(),dest.data(),dest.size());
	}
	inline size_t UTF8ToUNICODE(const Array<uchar> &src,Array<wchar> &dest){
		return UTF8ToUNICODE(src.data(),src.size(),dest.data(),dest.size());
	}

    DNC_DECLARE std::string UTF8ToANSI(const std::string &srcData) dnc_reg();
    DNC_DECLARE std::string ANSIToUTF8(const std::string &srcData) dnc_reg();

	//把一個xchar轉換成UTF-8編碼
	//parameters:
	//	ch   任意的字符
	//	utf8 不小于6字節的緩沖區,存儲ch轉換的結果
	//return:
	//	ch 轉換成utf8后占用的字節數
	DNC_DECLARE unsigned int XCharToUTF8(xchar ch,astr utf8);
	//把一個utf8字符轉換成任意字符xchar
	//parameters:
	//	utf8  存儲一個字符的UTF-8格式
	//	ch	  用于存儲utf8轉換的結果
	//return:
	//	utf8 表示的一個字符占用的字節數
	DNC_DECLARE unsigned int UTF8ToXChar(custr utf8,xchar &ch);
	

	//UTF-8字符串操作函數
	//默認情況下此函數以標準庫的strcmp函數實現,我們也可以設置系統參數
	//使得strcmp以更為人性的方式比較字符串。比如以邏輯的字符值或者是按照
	//漢字拼音比較。
	DNC_DECLARE int	 utf8_strcmp(castr str1,castr str2,unsigned int count= (unsigned int)-1);
	//返回值
	//size    str的邏輯長度,字符數
	//rawSize str的物理長度,以0結尾的緩沖區長度
	DNC_DECLARE void utf8_strlen(castr str,unsigned int &size,unsigned int &rawSize,unsigned int count= (unsigned int)-1);
	DNC_DECLARE xchar utf8_value(custr str);

	extern DNC_DECLARE cuchar gUTFBytes[256];
	extern DNC_DECLARE cuchar gFirstByteMark[7];
	extern DNC_DECLARE const unsigned long gUTFOffsets[6];


	/////////////////////////////////////////
	//utf8字符跌代器
	class utf8_const_iterator{
	public:
		typedef xchar		value_type;
		typedef value_type	reference;
		typedef utf8_const_iterator MyType;
	public:
		utf8_const_iterator(castr it):m_it((ustr)it){
            //如果it剛好在一個utf8字符的中間,則向前邊推算出這個字符
			for(;*m_it >= 0x80 && *m_it < 0xE0 && (ustr)it - m_it < 6;--m_it);
		}
		reference operator*() const{
			return *m_it <= 127 ? *m_it : utf8_value(m_it);
		}
		operator castr () const{
			return (castr)m_it;
		}
        int get_charSize() const{
            return gUTFBytes[*m_it]+1;
        }
		long operator - (const utf8_const_iterator &other) const{
			//long size;
			//for(utf8_const_iterator it=*this;it!=other;it++)
			//return (size_t)(m_it-it.m_it);
			return 0;
		}

        MyType operator + (int offset) const{
            if(offset < 0)
                return operator-(-offset);

            const uchar *str = m_it;
            for(int i=0;i<offset;i++)
                str += gUTFBytes[*str]+1;
            return MyType((castr)str);
        }
        MyType operator - (int offset) const{
            if(offset < 0)
                return operator+(-offset);

            const uchar *str = m_it;
            for(int i=0;i<offset;i++)
                for(--str;*str >= 0x80 && *str < 0xE0;--str);
            return MyType((castr)str);
        }
		MyType& operator ++(){
			m_it += gUTFBytes[*m_it]+1;
			return *this;
		}
		MyType operator ++(int){
			MyType tmp = *this;
			m_it += gUTFBytes[*m_it]+1;
			return tmp;
		}
		MyType& operator --(){
			//如果是在1000 0000(0x80)和1100 0000(0xE0)之間的值就忽略掉
			for(--m_it;*m_it >= 0x80 && *m_it < 0xE0;--m_it);
			return *this;
		}
		MyType operator --(int){
			MyType tmp = *this;
			for(--m_it;*m_it >= 0x80 && *m_it < 0xE0;--m_it);
			return tmp;
		}
		bool operator == (const MyType &right){
			return m_it==right.m_it;
		}
		bool operator != (const MyType &right){
			return !(*this == right);
		}
		bool operator<(const MyType &right) const{
			return m_it<right.m_it;
		}
		bool operator>(const MyType& right) const{
			return (right < *this);
		}
		bool operator<=(const MyType& right) const{
			return (!(right < *this));
		}
		bool operator>=(const MyType& right) const{
			return (!(*this < right));
		}
	protected:
		ustr m_it;
	};
	class utf8_iterator : public utf8_const_iterator{
	public:
		typedef utf8_iterator MyType;
	public:
		utf8_iterator(castr it):utf8_const_iterator(it){
		}
		MyType& operator ++(){
			m_it += gUTFBytes[*m_it]+1;
			return *this;
		}
		MyType operator ++(int){
			MyType temp = *this;
			m_it += gUTFBytes[*m_it]+1;
			return temp;
		}
		MyType& operator --(){
			for(--m_it;*m_it >= 0x80 && *m_it < 0xE0;--m_it);
			return *this;
		}
		MyType operator --(int){
			MyType tmp = *this;
			for(--m_it;*m_it >= 0x80 && *m_it < 0xE0;--m_it);
			return tmp;
		}
	};


	////////////////////////////////////
	//反向跌代器
	template<class Base>
	class utf8_reverse_bidirectional_iterator{
	public:
		typedef typename Base::value_type    value_type;
		typedef typename Base::reference 	reference;
		typedef utf8_reverse_bidirectional_iterator MyType;
	public:
		utf8_reverse_bidirectional_iterator(const Base &it):m_it(it){}
		Base base() const{
			return (m_it);
		}

		reference operator*() const{
			return *m_it;
		}
		MyType& operator ++(){
			--m_it;
			return *this;
		}
		MyType operator ++(int){
			MyType tmp = *this;
			--m_it;
			return tmp;
		}
		MyType& operator --(){
			++m_it;
			return *this;
		}
		MyType operator --(int){
			MyType tmp = *this;
			++m_it;
			return tmp;
		}
		bool operator == (const MyType &right){
			return m_it==right.m_it;
		}
		bool operator != (const MyType &right){
			return !(*this == right);
		}
		bool operator<(const MyType &right) const{
			return m_it<right.m_it;
		}
		bool operator>(const MyType& right) const{
			return (right < *this);
		}
		bool operator<=(const MyType& right) const{
			return (!(right < *this));
		}
		bool operator>=(const MyType& right) const{
			return (!(*this < right));
		}
	private:
		Base m_it;
	};
	typedef utf8_reverse_bidirectional_iterator<utf8_iterator> utf8_reverse_iterator;
	typedef utf8_reverse_bidirectional_iterator<utf8_const_iterator> utf8_const_reverse_iterator;
}

#endif //__DNC_UTF8_H__

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产91精品欧美| 国产精品乱码久久久久久| 国产无一区二区| 午夜精品久久久久久久久| 国产福利一区二区三区| 91精品国产91热久久久做人人| 欧美激情一区二区三区全黄| 免费成人在线影院| 欧美日本国产一区| 亚洲嫩草精品久久| 成人av免费在线| 久久亚洲综合av| 久久99精品一区二区三区三区| 91福利区一区二区三区| 国产精品成人在线观看| 精品一区二区三区蜜桃| 欧美一区三区二区| 亚洲午夜日本在线观看| 91一区二区三区在线观看| 久久久久国色av免费看影院| 国产在线精品一区二区| 日韩一区二区三区三四区视频在线观看| 亚洲青青青在线视频| 99热国产精品| 国产精品国产三级国产三级人妇| 国产精品亚洲第一| 久久在线观看免费| 国产综合久久久久久鬼色 | 日韩精品中午字幕| 亚洲电影激情视频网站| 一本色道久久综合狠狠躁的推荐 | 中文一区在线播放| 国产精品一区免费在线观看| 久久伊人蜜桃av一区二区| 美女mm1313爽爽久久久蜜臀| 日韩一区二区三区视频在线| 日本免费新一区视频| 欧美一二三四区在线| 精品一区二区免费视频| 久久美女艺术照精彩视频福利播放| 日韩成人一区二区三区在线观看| 欧美一级夜夜爽| 国产美女视频91| 国产精品久久久久婷婷二区次| 99精品黄色片免费大全| 亚洲国产一二三| 日韩午夜在线影院| 国产精品一区二区黑丝| 国产精品家庭影院| 欧美日韩中字一区| 久久电影网站中文字幕| 欧美国产97人人爽人人喊| 一本一道波多野结衣一区二区| 亚洲国产一区二区视频| 精品粉嫩aⅴ一区二区三区四区| 国产老妇另类xxxxx| 亚洲欧美偷拍另类a∨色屁股| 日本二三区不卡| 久久爱www久久做| 国产精品国产三级国产普通话三级 | 天堂va蜜桃一区二区三区| 日韩欧美一区二区不卡| 国产精品系列在线观看| 亚洲美女免费在线| 欧美一级理论性理论a| 国产在线精品一区在线观看麻豆| 国产精品国产自产拍高清av王其 | 亚洲一区二区美女| 亚洲精品在线一区二区| 色美美综合视频| 蜜桃一区二区三区在线| 中文字幕欧美一| 日韩视频永久免费| 91免费小视频| 欧美aaa在线| 亚洲男同性视频| 久久久国产精品不卡| 欧美日韩精品一区二区三区四区| 久久69国产一区二区蜜臀| 亚洲视频综合在线| 欧美精品一区二区三区在线 | 日韩小视频在线观看专区| av在线这里只有精品| 久久av资源站| 亚洲一级片在线观看| 国产精品私人自拍| 日韩午夜激情视频| 欧美色网站导航| 99久久久久久| 国产xxx精品视频大全| 日韩专区在线视频| 亚洲午夜久久久久中文字幕久| 日本一区二区综合亚洲| 精品久久久影院| 8x8x8国产精品| 欧美性猛交xxxx黑人交| 91在线播放网址| 成人av手机在线观看| 国产一区二区日韩精品| 日日噜噜夜夜狠狠视频欧美人| 亚洲免费在线播放| 中文字幕欧美一| 国产精品每日更新在线播放网址| 久久久精品tv| 久久久一区二区| 久久综合久久综合亚洲| 日韩一区二区在线看片| 欧美喷潮久久久xxxxx| 欧美色爱综合网| 欧美综合亚洲图片综合区| 99国产精品久久| 91在线免费播放| 91麻豆产精品久久久久久| 99久久精品国产精品久久| av福利精品导航| 91香蕉视频mp4| 一本色道综合亚洲| 在线精品视频一区二区三四| 在线免费观看不卡av| 在线观看免费亚洲| 精品视频1区2区3区| 51精品秘密在线观看| 欧美xxxx老人做受| 精品sm捆绑视频| 国产精品美女www爽爽爽| 亚洲天堂免费看| 亚洲午夜视频在线| 蜜臀久久99精品久久久久宅男| 毛片av一区二区| 国产成人精品免费网站| 99久久久久免费精品国产| 91啦中文在线观看| 在线不卡欧美精品一区二区三区| 4438成人网| 国产亚洲欧美日韩日本| 亚洲同性同志一二三专区| 亚洲一区二区成人在线观看| 天堂久久一区二区三区| 国产久卡久卡久卡久卡视频精品| 成人激情动漫在线观看| 欧美午夜精品久久久| 欧美一级黄色大片| 中文字幕巨乱亚洲| 午夜影院在线观看欧美| 狠狠v欧美v日韩v亚洲ⅴ| 不卡av在线免费观看| 欧美色图激情小说| 精品国产凹凸成av人网站| ...中文天堂在线一区| 天天色 色综合| 成人av手机在线观看| 欧美猛男gaygay网站| 国产偷v国产偷v亚洲高清 | 国产精品女同互慰在线看| 亚洲精品乱码久久久久久黑人| 日韩成人精品在线| 9i看片成人免费高清| 欧美精选午夜久久久乱码6080| 久久精品网站免费观看| 亚洲影视在线播放| 国产精品1区2区3区| 欧美精品 国产精品| 国产精品欧美一区喷水| 免费精品99久久国产综合精品| 成人av高清在线| 欧美不卡视频一区| 亚洲一级片在线观看| 成人av综合一区| 精品久久久久久久一区二区蜜臀| 成人欧美一区二区三区在线播放| 久草精品在线观看| 欧美日韩小视频| 亚洲三级小视频| 国产精品自产自拍| 日韩欧美国产成人一区二区| 一区二区三区成人| 成人毛片在线观看| 久久久五月婷婷| 日本中文字幕一区二区视频| 99精品视频在线观看| 国产人伦精品一区二区| 久久成人免费日本黄色| 欧美视频在线一区| 亚洲激情校园春色| 99久久精品99国产精品| 国产精品美女久久久久久久久| 国内精品伊人久久久久av一坑| 制服丝袜成人动漫| 日韩精品亚洲专区| 欧美三级电影在线观看| 亚洲国产日日夜夜| 色噜噜狠狠色综合中国| 亚洲人成精品久久久久| 99这里只有精品| 亚洲国产高清不卡| www.欧美精品一二区| 中文字幕av一区二区三区高| 国产jizzjizz一区二区| 中文字幕欧美日韩一区| 成人免费毛片app|