日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學無先后,達者為師

網站首頁 編程語言 正文

詳解C/C++實現各種字符轉換方法合集_C 語言

作者:坐望云起 ? 更新時間: 2022-11-17 編程語言

一、std::string 和 std::wstring 互轉

1、直接聲明std::wstring

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

2、wstring_convert

由于C++17之后取消std::codecvt_utf8的支持,所以這個方法不是最好的。可以考慮使用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 互轉

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

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

三、const char* 和 char* 互轉

1、const char*轉char*

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

2、 char*轉const char*

直接賦值即可

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

四、QString 和 std::string 互轉

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

補充

CString 和 *char 的轉換

1:CString -> *char

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

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

注意的是,在GetBuffer后要使用ReleaseBuffer以更新對象內部數據,否則會發生不可意料的意外。

2)可以使用強制轉換。

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

3)也可使用函數strcpy實現轉換。

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

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

即獲取下標為0的字符。

2:*char -> CString

1)使用format函數:

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

2)同樣也可以強制轉換:

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

*char 與 int 的轉換

1:*char -> int

1)使用atoi()函數:

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

2:int -> *char

1)使用itoa()函數:

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

itoa()函數中后面10代表十進制。

2)使用sprintf()函數:

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

原文鏈接:https://blog.csdn.net/bashendixie5/article/details/127058337

欄目分類
最近更新