我有一种情况,我需要将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. 将JavaUtilDate转换为NSDate,反之亦然?
- 2. 将lonlat转换为xyz,反之亦然
- 3. 将UIImage转换为NSString(反之亦然)
- 4. 将ArrayBuffer转换为Array,反之亦然
- 5. 将HTML转换为Xliff,反之亦然
- 6. 如何将System :: Char转换为C++ char
- 7. 如何将ANSI字符(char)转换为Unicode字符(wchar_t),反之亦然?
- 8. DTO转换为实体,反之亦然
- 9. 将列转换成行,反之亦然
- 10. 如何将pandas DataFrame转换为字节,反之亦然?
- 11. 如何将Unix时间戳转换为DateTime,反之亦然?
- 12. 如何将矩阵转换为3D数组或反之亦然?
- 13. 如何在Java中将POJO转换为Map,反之亦然?
- 14. 如何在Qt中将QVariant转换为QString,反之亦然?
- 15. 如何将POJO转换为JSON,反之亦然?
- 16. 如何将POJO转换为HEX,反之亦然?
- 17. 如何将坡度转换为度数,反之亦然?
- 18. 如何将Java日期转换为OADate或反之亦然?
- 19. 如何将字符串转换为IP地址,反之亦然
- 20. 如何将Joda-Time DateTime转换为java.util.Date,反之亦然?
- 21. 如何将Bayer转换为使用OpenCV的RGB,反之亦然
- 22. 如何将int []转换为OpenCV Mat? (反之亦然)
- 23. 如何将NSDictionary转换为NSData,反之亦然?
- 24. 将char []转换为System :: Object
- 25. C++将存储为char *的4个字符转换为int,反之亦然
- 26. 转换到char [32](或反之亦然)用C
- 27. 如何将System :: String ^转换为const char *?
- 28. 如何将System :: String转换为unsigned char *?
- 29. 转换Unicode字符串,反之亦然
- 30. 如何将十进制转换成二进制,反之亦然
你有没有想过呢? (将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