如何将System :: WideString转换为char *,反之亦然?

时间:2009-12-17 23:55:52

标签: c++ char c++builder widestring

我有一种情况需要将char*WideString进行比较 如何在C ++中将WideString转换为char *?

4 个答案:

答案 0 :(得分:6)

答案 1 :(得分:3)

答案 2 :(得分:1)

不可能。实际上,你混合了两个不同的概念:

  • Widestring意味着UTF-16编码的缓冲区。
  • char *可以包含任何内容,从UTF-8到仅ASCII文本(在这种情况下,只有当您的宽字符串不包含非ASCII字符时,才可以转换)。

请参阅我对https://stackoverflow.com/questions/1049947/should-utf-16-be-considered-harmful关于如何正确处理文字的回答。

答案 3 :(得分:1)

比较 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*(因为问题 title 表示您想要这样做),您可以考虑使用{ {3}}类型。它们可以在彼此之间转换。要获得普通指针,请调用AnsiString方法,就像使用std::string一样。

WideString bar = ...;
AnsiString foo = bar;
std::cout << foo.c_str();