亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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

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

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

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

而一個合法UTF8的字符長度可能為1~4位。

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

參考這個頁面: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)文章

  • 帶你從編碼角度分析C++重載原理

    帶你從編碼角度分析C++重載原理

    這篇文章主要為大家介紹了從編碼角度分析C++重載原理,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-01-01
  • C語言 MD5的源碼實例詳解

    C語言 MD5的源碼實例詳解

    這篇文章主要介紹了C語言 MD5的源碼實例詳解的相關(guān)資料,需要的朋友可以參考下
    2017-01-01
  • C語言實現(xiàn)考試報名管理系統(tǒng)

    C語言實現(xiàn)考試報名管理系統(tǒng)

    這篇文章主要為大家詳細介紹了C語言實現(xiàn)考試報名管理系統(tǒng),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-06-06
  • QT實現(xiàn)年會抽獎小軟件的示例代碼

    QT實現(xiàn)年會抽獎小軟件的示例代碼

    本文主要介紹了QT實現(xiàn)年會抽獎小軟件的示例代碼,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-01-01
  • 使用udp發(fā)送>=128K的消息會報ENOBUFS的錯誤的解決方法

    使用udp發(fā)送>=128K的消息會報ENOBUFS的錯誤的解決方法

    在項目中選擇了unix域的數(shù)據(jù)報套接口。在使用過程中碰到了如下,問題:發(fā)送<128K的消息時,客戶、進程可以正常收發(fā)消息;發(fā)送>=128K的消息時,發(fā)送端(sendto)返回ENOBUFS的錯誤。下面小編來詳細說下
    2019-05-05
  • c語言?指針零基礎(chǔ)講解

    c語言?指針零基礎(chǔ)講解

    指針是指向另一個變量的變量。意思是一個指針保存的是另一個變量的內(nèi)存地址。換句話說,指針保存的并不是普通意義上的數(shù)值,而是另一個變量的地址值。一個指針保存了另一個變量的地址值,就說這個指針“指向”了那個變量
    2022-02-02
  • C語言中順序棧和鏈棧的定義和使用詳解

    C語言中順序棧和鏈棧的定義和使用詳解

    這篇文章主要為大家詳細介紹了C語言中順序棧和鏈棧的定義和使用,文中的示例代碼講解詳細,對我們學(xué)習(xí)C語言有一定的幫助,感興趣的小伙伴可以了解一下
    2022-10-10
  • C++生成隨機數(shù)的實現(xiàn)代碼

    C++生成隨機數(shù)的實現(xiàn)代碼

    這篇文章主要介紹了C++生成隨機數(shù)的實現(xiàn)代碼,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-04-04
  • C++類URL編碼和解碼使用技巧

    C++類URL編碼和解碼使用技巧

    在項目開發(fā)過程中,經(jīng)常會使用到c++ 的url編碼和解碼,本文將以此問題詳細介紹使用技巧,需要的朋友可以參考下
    2012-11-11
  • c語言詳解動態(tài)內(nèi)存分配及常見錯誤的解決

    c語言詳解動態(tài)內(nèi)存分配及常見錯誤的解決

    給數(shù)組分配多大的內(nèi)存空間?你是否和初學(xué)C時的我一樣,有過這樣的疑問。這一期就來聊一聊動態(tài)內(nèi)存的分配,讀完這篇文章,你可能對內(nèi)存的分配有一個更好的理解
    2022-04-04

最新評論