有什么方法吗? 我的电脑是AMD64。 ::std::string str; BOOL loadU(const wchar_t* lpszPathName, int flag = 0); 当我使用: loadU(&str); VS2005编译器说: Error 7 error C2664:: cannot convert parameter 1 from 'std::string *__w64 ' to 'const wchar_t *' 我该怎么做?
以下可能不符合SO的问题; 如果出界,请随时告诉我走开。 这里的问题基本上是,“我是否正确理解C标准,这是正确的方式去做事情? 我想要澄清,确认和更正我对C中字符处理(以及C ++和C ++ 0x)的理解。 首先,一个重要的观察: 可移植性和序列化是正交的概念。 便携式的东西是像C, unsigned int , wchar_t 。 可串行化的东西是像uint32_t或UTF-8的东西。 “便携式”意味着您可以重新编译相同的源代码,并在每个支持的平台上获得工作结果,但二进制表示可能完全不同(甚至不存在,例如,TCP-over-carrier鸽子)。 另一方面,可序列化的东西总是具有相同的表示forms,例如我可以在Windows桌面,手机或牙刷上读取的PNG文件。 便携式的东西是内部的,可序列化的东西处理I / O。 便携式的东西是types安全的,可序列化的东西需要types的双关语。 </前导> 在C中的字符处理中,有两组事物分别涉及到可移植性和序列化: wchar_t , setlocale() , mbsrtowcs() / wcsrtombs() : C标准没有提到“编码” 。 实际上,对任何文本或编码属性都是完全不可知的。 它只是说“你的入口点是main(int, char**) ;你得到一个typeswchar_t ,它可以容纳你所有系统的字符;你可以读取input的字符序列并使它们变成可用的string,反之亦然。 iconv()和UTF-8,16,32:一个函数/库在定义明确的固定编码之间进行转码。 所有由iconv处理的编码都被普遍理解和同意,只有一个例外。 C的可移植的,编码不可知的世界与其wchar_t可移植字符types和确定性外部世界之间的桥梁是WCHAR-T和UTF之间的iconv转换 。 所以,我应该总是将我的string内部存储在一个编码无关的wstring中,通过wcsrtombs()与CRT连接,并使用iconv()进行序列化? 概念: my program <– wcstombs — /==============\ — iconv(UTF8, WCHAR_T) –> […]
我是Windows编程的新手,在阅读Petzold书后我想知道: 使用TCHARtypes和_T()函数来声明string还是我应该在新代码中使用wchar_t和L""string,这仍然是一个好习惯吗? 我只会定位到Windows 2000以上,我的代码将从一开始就是国际化的。
例: #include <iostream> using namespace std; int main() { wchar_t en[] = L"Hello"; wchar_t ru[] = L"Привет"; //Russian language cout << ru << endl << en; return 0; } 这个代码只打印HEX值,如地址。 如何打印wchar_tstring?
我正在试图打印一个俄文“ф”( U + 0444 CYRILLIC SMALL LETTER EF)字符,该字符被赋予十进制数1092 。 使用C ++,我怎样才能打印出这个字符? 我会认为沿着下面的路线的东西会工作,但… int main (){ wchar_t f = '1060'; cout << f << endl; }