最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C++中可正確獲取UTF-8字符長(zhǎng)度的函數(shù)分享

 更新時(shí)間:2014年08月05日 09:55:20   投稿:junjie  
這篇文章主要介紹了C++中可正確獲取UTF-8字符長(zhǎng)度的函數(shù)分享,需要的朋友可以參考下

在C++的char*以及string中,使用的是字節(jié)流編碼,即sizeof(char) == 1。

也就是說,C++是不區(qū)分字符的編碼的。

而一個(gè)合法UTF8的字符長(zhǎng)度可能為1~4位。

現(xiàn)在假設(shè)一串輸入為UTF8編碼,如何能準(zhǔn)確的定位到每個(gè)UTF8字符的“CharPoint”,而不會(huì)錯(cuò)誤的分割字符呢?

參考這個(gè)頁(yè)面:http://www.nubaria.com/en/blog/?p=289

可以改造出下面的函數(shù):

const unsigned char kFirstBitMask = 128; // 1000000
const unsigned char kSecondBitMask = 64; // 0100000
const unsigned char kThirdBitMask = 32; // 0010000
const unsigned char kFourthBitMask = 16; // 0001000
const unsigned char kFifthBitMask = 8; // 0000100
 
int utf8_char_len(char firstByte)
{
  std::string::difference_type offset = 1;

  if(firstByte & kFirstBitMask) // This means the first byte has a value greater than 127, and so is beyond the ASCII range.
  {  
    if(firstByte & kThirdBitMask) // This means that the first byte has a value greater than 224, and so it must be at least a three-octet code point.
    {  
      if(firstByte & kFourthBitMask) // This means that the first byte has a value greater than 240, and so it must be a four-octet code point.
        offset = 4;
      else
        offset = 3;
    }  
    else
    {  
      offset = 2;
    }  
  }  
  return offset;
}

相關(guān)文章

最新評(píng)論

榕江县| 宜兴市| 长泰县| 新兴县| 嘉善县| 怀来县| 台东市| 东兴市| 阿合奇县| 长沙县| 青铜峡市| 闸北区| 蒙城县| 丰都县| 若尔盖县| 顺义区| 东光县| 阜新市| 石狮市| 兴国县| 安丘市| 淅川县| 田东县| 怀集县| 凤山县| 桐乡市| 莫力| 景宁| 漯河市| 周口市| 高淳县| 宜黄县| 酉阳| 密云县| 丰都县| 建平县| 屏东县| 彭泽县| 印江| 石嘴山市| 封丘县|