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 样本类包裹着字符串