这是我写的第一个C ++程序,所以我绝不是一个c ++程序员,所以请善待。我需要能够连接到数据库,获取链接,然后从该链接下载文件。一切正常,除了我必须硬编码链接,而不是使用我保存在字符串中的链接。 我只需要将我的字符串转换为tchar并尝试过一些东西,但它不起作用。我需要TCHAR url []在字符串dotnetlink中有值,而不是当前在那里的硬编码url。谢谢您的帮助。
string dotnetlink;
//REQUEST URL FOR DOWNLOAD
send(Socket,"POST /getdotnetlink.php / HTTP/1.1\r\nHost: www.domain.com\r\nConnection: close\r\n\r\n", strlen("POST /getdotnetlink.php / HTTP/1.1\r\nHost: www.domain.com\r\nConnection: close\r\n\r\n"),0);
char buffer[10000];
int nDataLength;
while ((nDataLength = recv(Socket,buffer,10000,0)) > 0){
int i = 0;
while (buffer[i] >= 32 || buffer[i] == '\n' || buffer[i] == '\r') {
//LINK TO DOWNLOAD STORED IN THIS STRING
dotnetlink = dotnetlink + (buffer[i]);
i += 1;
}
}
closesocket(Socket);
WSACleanup();
cout << dotnetlink;
const TCHAR url[] = _T("http://www.linktomydownload.com/file.exe");
答案 0 :(得分:1)
TCHAR只是CHAR或WCHAR的typedef,具体取决于是否定义了UNICODE宏。这意味着如果未定义UNICODE,则不需要转换。如果已定义,则可以使用MultiByteToWideChar函数执行转换。
作为提示,TCHAR和相关的&#34; T&#34; - 前缀宏和typedef是Windows 95天的事情,当时Unicode支持不是很广泛。现在你应该总是使用Unicode,除了实际需要字节字符串的地方(例如HTTP协议)。
以下是您可能会这样做的示例:
WCHAR szDotnetlink[256];
int length = ::MultiByteToWideChar(CP_UTF8, 0, dotnetlink.c_str(), -1, szDotnetlink, 256);
if (length == 0)
// the conversion failed