StrByteType - C++ Builder

C++ Builder 參考手冊 ? System::Sysutils ? StrByteType


字符串里面某個(gè)編碼單元的類型

頭文件:#include <System.SysUtils.hpp>
命名空間:System::Sysutils
函數(shù)原型:

TMbcsByteType __fastcall StrByteType(char * Str, unsigned Index);
TMbcsByteType __fastcall StrByteType(System::WideChar * Str, unsigned Index);

參數(shù):

  • Str:字符串;
  • Index:編碼單元序號,通過測試發(fā)現(xiàn)與「幫助」里面的說明不同:
    char * 版本的 Index 從 0 開始到 n-1 (假定字符串長度為 n);
    wchar_t * 版本的 Index 從 1 開始到 n (假定字符串長度為 n);
    測試程序?yàn)楸疚暮竺娴睦樱?/li>

返回值:

  • 字符串 Str 里面第 Index 個(gè) char 或 char16_t (或 wchar_t) 的類型:
    ? mbSingleByte 單個(gè)編碼單元的字符;
    ? mbLeadByte 兩個(gè)編碼單元的字符當(dāng)中前面一個(gè)編碼單元;
    ? mbTrailByte 兩個(gè)編碼單元的字符當(dāng)中后面一個(gè)編碼單元;
  • AnsiString 字符串英文字母和符號 1 個(gè)字節(jié),是單個(gè)編碼單元的字符 mbSingleByte ,漢字 2 個(gè)字節(jié),是兩個(gè)編碼單元的字符,前面一個(gè)字符是 mbLeadByte,后面一個(gè)字符是 mbTrailByte;
  • UnicodeString 字符串英文字符、常用的漢字等,是 1 個(gè) char16_t (或 wchar_t),是單個(gè)編碼單元的字符 mbSingleByte,不常用的漢字、表情符號等,是 2 個(gè) char16_t (或 wchar_t),是兩個(gè)編碼單元的字符,前面一個(gè) char16_t 是 mbLeadByte,后面一個(gè) char16_t 是 mbTrailByte。
  • 函數(shù) StrByteType 和 ByteType 的功能相同,不同點(diǎn)為:
    ? 函數(shù) StrByteType 的 Str 參數(shù)類型為字符指針,Index 從 0 (char * 版本) 或 1 (wchar_t * 版本) 開始;
    ? 函數(shù) ByteType 的 S 參數(shù)類型為字符串類,Index 從 1 開始。

例子:通過這個(gè)例子測試發(fā)現(xiàn)與「幫助」里面的說明不同:
char * 版本的 Index 從 0 開始到 n-1 (假定字符串長度為 n);
wchar_t * 版本的 Index 從 1 開始到 n (假定字符串長度為 n);

template<class T>
UnicodeString EnumToString(T t)
{
    return Typinfo::GetEnumName(__delphirtti(T), (int)t);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
    char s[] = "Hello玄坴";
    Memo1->Lines->Add(s);

    int n = std::strlen(s);
    for(int i=0; i<n; i++) // char * 版本:從 0 到 n-1
    {
        Memo1->Lines->Add(IntToStr(i) + L": " + EnumToString(Sysutils::StrByteType(s,i)));
    }
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
    wchar_t s[] = L"土??圭垚???";
    Memo1->Lines->Add(s);

    int n = std::wcslen(s);
    for(int i=1; i<=n; i++) // wchar_t * 版本:從 1 到 n
    {
        Memo1->Lines->Add(IntToStr(i) + L": " + EnumToString(Sysutils::StrByteType(s,i)));
    }
}

運(yùn)行結(jié)果:

點(diǎn)擊 Button1 的運(yùn)行結(jié)果
點(diǎn)擊 Button2 的運(yùn)行結(jié)果

相關(guān):


C++ Builder 參考手冊 ? System::Sysutils ? StrByteType

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容