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

詳解C/C++實(shí)現(xiàn)各種字符轉(zhuǎn)換方法合集

 更新時(shí)間:2022年09月27日 16:20:17   作者:坐望云起  
這篇文章主要為大家詳細(xì)介紹了C/C++中實(shí)現(xiàn)各種字符轉(zhuǎn)換的方法,文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)C++具有一定借鑒價(jià)值,需要的可以參考一下

一、std::string 和 std::wstring 互轉(zhuǎn)

1、直接聲明std::wstring

std::wstring uriImage{L"D:\\Project\\screen.jpg"};
Uri uri{ uriImage };

2、wstring_convert

由于C++17之后取消std::codecvt_utf8的支持,所以這個(gè)方法不是最好的。可以考慮使用WideCharToMultiByte和MultiByteToWideChar替代。

std::wstring wideString = std::wstring_convert<std::codecvt_utf8<wchar_t>>().from_bytes(stringToConvert);

3、WideCharToMultiByte和MultiByteToWideChar

std::string MyTools::ConvertWideToANSI(const std::wstring& wstr)
{
    int count = WideCharToMultiByte(CP_ACP, 0, wstr.c_str(), wstr.length(), NULL, 0, NULL, NULL);
    std::string str(count, 0);
    WideCharToMultiByte(CP_ACP, 0, wstr.c_str(), -1, &str[0], count, NULL, NULL);
    return str;
}
 
std::wstring MyTools::ConvertAnsiToWide(const std::string& str)
{
    int count = MultiByteToWideChar(CP_ACP, 0, str.c_str(), str.length(), NULL, 0);
    std::wstring wstr(count, 0);
    MultiByteToWideChar(CP_ACP, 0, str.c_str(), str.length(), &wstr[0], count);
    return wstr;
}
 
std::string MyTools::ConvertWideToUtf8(const std::wstring& wstr)
{
    int count = WideCharToMultiByte(CP_UTF8, 0, wstr.c_str(), wstr.length(), NULL, 0, NULL, NULL);
    std::string str(count, 0);
    WideCharToMultiByte(CP_UTF8, 0, wstr.c_str(), -1, &str[0], count, NULL, NULL);
    return str;
}
 
std::wstring MyTools::ConvertUtf8ToWide(const std::string& str)
{
    int count = MultiByteToWideChar(CP_UTF8, 0, str.c_str(), str.length(), NULL, 0);
    std::wstring wstr(count, 0);
    MultiByteToWideChar(CP_UTF8, 0, str.c_str(), str.length(), &wstr[0], count);
    return wstr;
}

二、winrt::hstring 和 std::string 互轉(zhuǎn)

winrt::hstring是C++/WinRT 的自定義字符串類型(在 C++/WinRT 基礎(chǔ)庫(kù)中定義,即%WindowsSdkDir%Include\<WindowsTargetPlatformVersion>\cppwinrt\winrt\base.h)。

// 直接聲明一個(gè)winrt::hstring
winrt::hstring w{L"zh-CN"};
// 調(diào)用winrt::to_hstring方法直接把std::string轉(zhuǎn)為winrt::hstring
winrt::hstring htr = winrt::to_hstring("this is a std string");
 
// 調(diào)用winrt::to_string轉(zhuǎn)為std::string
winrt::hstring w{L"zh-CN1111測(cè)試"};
std::string temp = winrt::to_string(w);

三、const char* 和 char* 互轉(zhuǎn)

1、const char*轉(zhuǎn)char*

const char *filePath= "abc";
char *newPath = const_cast<char *>(filePath);

2、 char*轉(zhuǎn)const char*

直接賦值即可

const char* cpc;
char* pc = "abcde";
cpc = pc;

四、QString 和 std::string 互轉(zhuǎn)

std::string a = "asdfg";
QString path = QString::fromStdString("asdfg");
std::string d = path.toStdString();

補(bǔ)充

CString 和 *char 的轉(zhuǎn)換

1:CString -> *char

1)CString轉(zhuǎn)化為*char可以使用CString中的GetBuffer()函數(shù),具體如下:

CString string1 = _T("string");
char *str = string1.GetBuffer();

注意的是,在GetBuffer后要使用ReleaseBuffer以更新對(duì)象內(nèi)部數(shù)據(jù),否則會(huì)發(fā)生不可意料的意外。

2)可以使用強(qiáng)制轉(zhuǎn)換。

CString string1 = _T(“string”);
char *str = (LPTSTR)(LPCTSTR)string1;

3)也可使用函數(shù)strcpy實(shí)現(xiàn)轉(zhuǎn)換。

4)使用CString的GetAt()函數(shù):

CString string1 = _T("string");
char *str = string1.GetAt(0);

即獲取下標(biāo)為0的字符。

2:*char -> CString

1)使用format函數(shù):

char *str = "string";
CString string1;
string1.format("%s",str);

2)同樣也可以強(qiáng)制轉(zhuǎn)換:

char *str = "string";
CString string1(str);

*char 與 int 的轉(zhuǎn)換

1:*char -> int

1)使用atoi()函數(shù):

char *val = "12345";
int num = atoi(val);

2:int -> *char

1)使用itoa()函數(shù):

int num = 12345;
char buf[5];
itoa(buf, num, 10);

itoa()函數(shù)中后面10代表十進(jìn)制。

2)使用sprintf()函數(shù):

int num = 12345;
char buf[6];
sprintf(buf, "%d", num);

到此這篇關(guān)于詳解C/C++實(shí)現(xiàn)各種字符轉(zhuǎn)換方法合集的文章就介紹到這了,更多相關(guān)C++字符轉(zhuǎn)換內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 關(guān)于背包問題的一些理解和應(yīng)用

    關(guān)于背包問題的一些理解和應(yīng)用

    這篇文章主要介紹了關(guān)于背包問題的一些理解和應(yīng)用,本文可以說是背包問題九講的補(bǔ)充、讀后感,需要的朋友可以參考下
    2014-08-08
  • fatal error LNK1104: 無法打開文件“l(fā)ibc.lib”的解決方法

    fatal error LNK1104: 無法打開文件“l(fā)ibc.lib”的解決方法

    本篇文章是對(duì)fatal error LNK1104: 無法打開文件“l(fā)ibc.lib”的解決方法進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-05-05
  • Qt實(shí)現(xiàn)日志文件的滾動(dòng)寫入

    Qt實(shí)現(xiàn)日志文件的滾動(dòng)寫入

    這篇文章主要為大家介紹了如何使用Qt實(shí)現(xiàn)日志文件的滾動(dòng)寫入功能,在日志文件達(dá)到10MB時(shí)創(chuàng)建新的日志文件,并且在總?cè)罩疚募笮∵_(dá)到10GB時(shí)開始覆蓋最早的日志文件,需要的可以參考下
    2024-11-11
  • C語(yǔ)言回溯法解八皇后問題(八皇后算法)

    C語(yǔ)言回溯法解八皇后問題(八皇后算法)

    這篇文章介紹了C語(yǔ)言回溯法解八皇后問題,文中通過示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-12-12
  • C++函數(shù)重載的深入解析

    C++函數(shù)重載的深入解析

    在C++中,我們也能夠把具有相同功能的函數(shù)整合到一個(gè)函數(shù)上,而不必去寫好多個(gè)函數(shù)名不同的函數(shù),這叫做函數(shù)的重載。以下是對(duì)C++中的函數(shù)重載進(jìn)行了詳細(xì)的分析介紹,需要的朋友可以過來參考下
    2013-07-07
  • Visual Studio 2019 如何新建 Win32項(xiàng)目的方法步驟

    Visual Studio 2019 如何新建 Win32項(xiàng)目的方法步驟

    這篇文章主要介紹了Visual Studio 2019 如何新建 Win32項(xiàng)目的方法步驟,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-03-03
  • C++ Boost Bind庫(kù)示例分析使用

    C++ Boost Bind庫(kù)示例分析使用

    Boost是為C++語(yǔ)言標(biāo)準(zhǔn)庫(kù)提供擴(kuò)展的一些C++程序庫(kù)的總稱。Boost庫(kù)是一個(gè)可移植、提供源代碼的C++庫(kù),作為標(biāo)準(zhǔn)庫(kù)的后備,是C++標(biāo)準(zhǔn)化進(jìn)程的開發(fā)引擎之一,是為C++語(yǔ)言標(biāo)準(zhǔn)庫(kù)提供擴(kuò)展的一些C++程序庫(kù)的總稱
    2022-11-11
  • 解析C/C++中如何終止線程的運(yùn)行

    解析C/C++中如何終止線程的運(yùn)行

    本篇文章是對(duì)C/C++中如何終止線程運(yùn)行的方法進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-05-05
  • C++用兩個(gè)棧實(shí)現(xiàn)一個(gè)隊(duì)列(面試官的小結(jié))

    C++用兩個(gè)棧實(shí)現(xiàn)一個(gè)隊(duì)列(面試官的小結(jié))

    這篇文章主要給大家介紹了關(guān)于C++用兩個(gè)棧實(shí)現(xiàn)一個(gè)隊(duì)列的相關(guān)資料,這是來自一名面試官的小結(jié),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用C++具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-05-05
  • C語(yǔ)言多文件編程問題解析

    C語(yǔ)言多文件編程問題解析

    在某些場(chǎng)景中,考慮到編譯效率和可移植性,#pragma once 和 #ifndef 經(jīng)常被結(jié)合使用來避免頭文件被 重復(fù)引入,這里介紹用 _Pragma 操作符避免頭文件重復(fù)引入的問題,感興趣的朋友跟隨小編一起看看吧
    2022-12-12

最新評(píng)論

郑州市| 宜良县| 临高县| 绍兴县| 随州市| 泽州县| 内乡县| 察雅县| 文化| 青海省| 通河县| 兴化市| 凤冈县| 铁岭县| 五原县| 平乡县| 收藏| 玛沁县| 澜沧| 长泰县| 瑞昌市| 个旧市| 定边县| 高要市| 广饶县| 奉新县| 思南县| 股票| 石狮市| 宁武县| 河间市| 眉山市| 康乐县| 天等县| 博野县| 如皋市| 府谷县| 松原市| 进贤县| 安义县| 辽中县|