C ++需要帮助将字符串转换为tchar,从其他帖子尝试了一些东西,但没有工作

时间:2015-04-29 17:26:11

标签: visual-c++

这是我写的第一个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");

1 个答案:

答案 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