我有一種情況,我需要將char*
與WideString
進行比較。
如何將WideString轉換爲C++中的char *?如何將System :: WideString轉換爲char *,反之亦然?
回答
您可以使用wcstombs函數。
size_t wcstombs(char * mbstr, const wchar_t * wcstr, size_t max);
這讓我越過終點線: System :: WideString wstr =「something」; char * buffer = new char [100]; wcstombs(buffer,wstr.data(),100); 謝謝。 – Seth 2009-12-18 01:57:57
該解決方案僅限於Windows。 – 2009-12-18 00:15:09
是的,C99 wcstombs()/ mbstowcs()在其他答案中已有介紹。 – Gonzalo 2009-12-18 00:18:22
比利,這是System :: WideString類型,這是這個問題的主題。 – 2009-12-18 02:48:15
不可能。其實,你混合了兩個不同的概念:
- Widestring意味着UTF-16編碼的緩衝區。
- char *可能包含任何內容,從UTF-8到純ASCII文本(在這種情況下,只有在您的寬字符串不包含非ASCII字符時纔可以轉換)。
請參閱我有關如何正確處理文本的https://stackoverflow.com/questions/1049947/should-utf-16-be-considered-harmful的回答。
要比較一個System::WideString
對象與char*
(因爲這個問題體說你想做的事),你可以創建從指針新WideString
對象,然後使用普通==
操作。該課程有幾個構造函數,其中一個用於const char*
。
char* foo = ...;
WideString bar = ...;
if (WideString(foo) == bar)
std::cout << "They're equal!\n";
其實,只要WideString
對象是在左邊,你甚至不需要構造函數調用,因爲指針會自動轉換。
if (bar == foo) { ... }
要轉換一個WideString
到char*
(因爲這個問題標題說你想做的事),你可能會考慮使用AnsiString
類型。它們可以相互轉換。要獲得普通指針,請撥打c_str
方法,就像使用std::string
一樣。
WideString bar = ...;
AnsiString foo = bar;
std::cout << foo.c_str();
A *空格*?這是不對的。空字符會導致截斷;如果有一個不在字符串的實際末尾,那麼使用構造函數的雙參數版本,以便可以指定實際長度。如果你在'std :: istringstream'中有某個東西,並且正在用'stream >> stringvar'從它讀取一個字符串,那麼空格可能會導致截斷。 – 2009-12-18 03:54:09
- 1. 將ansi轉換爲utf8,反之亦然
- 2. 將float2轉換爲double2,反之亦然
- 3. 將lonlat轉換爲xyz,反之亦然
- 4. 將NSString轉換爲NSData,反之亦然
- 5. 將HTML轉換爲Xliff,反之亦然
- 6. 將JavaUtilDate轉換爲NSDate,反之亦然?
- 7. 將RSAPrivateKey轉換爲PrivateKey,反之亦然
- 8. 如何將System :: Char轉換爲C++ char
- 9. DTO轉換爲實體,反之亦然
- 10. 將列轉換成行,反之亦然
- 11. 如何將字符串轉換爲IP地址,反之亦然
- 12. 如何將CLOB轉換爲圖像或反之亦然?
- 13. 如何將Bayer轉換爲使用OpenCV的RGB,反之亦然
- 14. 如何將字符串轉換爲Java文件,反之亦然?
- 15. 如何將Unix時間戳轉換爲DateTime,反之亦然?
- 16. 如何將矩陣轉換爲3D數組或反之亦然?
- 17. 如何將NSDictionary轉換爲NSData,反之亦然?
- 18. 如何將pandas DataFrame轉換爲字節,反之亦然?
- 19. 如何在Qt中將QVariant轉換爲QString,反之亦然?
- 20. 如何將XML從XML轉換爲Java,反之亦然?
- 21. 如何將int []轉換爲OpenCV Mat? (反之亦然)
- 22. 如何將Yaml轉換爲csv,反之亦然
- 23. 如何將指針轉換爲整數,反之亦然?
- 24. 如何在Python中將RGB轉換爲CMYK,反之亦然?
- 25. 如何使用Sybase ASE將hex轉換爲varchar,反之亦然?
- 26. 如何將POJO轉換爲JSON,反之亦然?
- 27. 如何將坡度轉換爲度數,反之亦然?
- 28. 如何將Joda-Time DateTime轉換爲java.util.Date,反之亦然?
- 29. 如何將POJO轉換爲HEX,反之亦然?
- 30. 如何將Java日期轉換爲OADate或反之亦然?
你有沒有想過呢? (將char *轉換爲WideString) – 2009-12-17 23:57:30
好吧,兩種方法都很好理解。不過,我寧願不使用WideString。 – Seth 2009-12-18 00:01:39
也許你可以延伸'char'類型,直到它足夠寬? ;-) 由於'char'類型小於* WideString *所使用的類型,因此更好的方法是將較小的值轉換爲較大的值然後進行比較。 – 2009-12-18 00:33:42