c_cpp 用于cpp字符串的UTF8解码器类
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c_cpp 用于cpp字符串的UTF8解码器类相关的知识,希望对你有一定的参考价值。
class utf8 {
vector<uint32_t> _codes;
string _s;
int nunits(unsigned char byte) {
return
byte<0x80? 1:
byte<0xe0? 2:
byte<0xf0? 3:
byte<0xf8? 4:
-1;
}
uint32_t unit(string s) {
check(size(s)==nunits(s[0]), "wrong unit:", s);
if (1==size(s)) return s[0];
uint32_t c = (s[0]&(0xff>>(size(s)+1))) << (6*(size(s)-1));
for (int i=1; i<size(s); ++i) {
c |= (s[i]&0x3f) << (6*(size(s)-1-i));
}
return c;
}
public:
int len() {return size(_codes);}
string str() {return _s;}
uint32_t code(int i) {return _codes.at(i);}
vector<uint32_t> codes() {return _codes;}
utf8(string s) {
_s = s;
for (int i=0; i<size(s);) {
int n = nunits(s[i]);
_codes.push_back(unit(s.substr(i, n)));
i += n;
}
}
};
以上是关于c_cpp 用于cpp字符串的UTF8解码器类的主要内容,如果未能解决你的问题,请参考以下文章
c_cpp 将utf8文件输出到控制台
c_cpp Base64编码和解码
c_cpp StringsAPI用于STL字符串
c_cpp 用于检查输入是整数还是字符串的程序
c_cpp c ++中的字符串类
c_cpp 样本类包裹着字符串