char * 、BSTR、long、wchar_t *、LPCWSTR、string、QString、CStringA类型转换

char* 转 BSTR

char* s1 = "zhangsan";
CString s2 = CString(s1);
BSTR s3 = s2.AllocSysString();

 

char* 转 LPCWSTR

char* a = "a.jpg";
WCHAR b[256];
memset(b, 0, sizeof(b));
MultiByteToWideChar(CP_ACP, 0, a, strlen(a) + 1, b, sizeof(b) / sizeof(b[0]));

 

long 转 char*

// param[0]: long,要转换的数字
// param[1]: char *,转换后指向字符串的指针
// param[2]: 进制
ltoa(age, "age is ", 10);

 

char* 转 CStringA

char* ch1 = "中文测试123";
CStringA str(ch1);

 

 

CStringA 转 char*

CStringA str = L"";
char* ch2 = new char[str.GetLength()+1];
memset(ch2, 0, str.GetLength()+1);
strcpy(ch2, str.GetString());
delete ch2;

 

 

CString 转 BSTR

CString a = "abc";
BSTR b = a.AllocSysString();

 

 

wchar_t * 转 char *

wchar_t buffer[MAX_PATH];
BOOL result = SHGetSpecialFolderPath(0, buffer, CSIDL_LOCAL_APPDATA, false);
wcscat(buffer, L"\\GPR.log");

int iSize;
char* pszMultiByte;

//返回接受字符串所需缓冲区的大小,已经包含字符结尾符'\0'
iSize = WideCharToMultiByte(CP_ACP, 0, buffer, -1, NULL, 0, NULL, NULL); 
pszMultiByte = (char*)malloc(iSize * sizeof(char)); 
WideCharToMultiByte(CP_ACP, 0, buffer, -1, pszMultiByte, iSize, NULL, NULL);

 

string 转 BSTR

#include <string>
#include <comutil.h>
#pragma comment(lib, "comsuppw.lib")


std::string a = "hello world";
_bstr_t bstr_t(a.c_str());
BSTR res_bstr = bstr_t.GetBSTR();

 

BSTR 转 string

#include <string>
#include <comutil.h>
#pragma comment(lib, "comsuppw.lib")

BSTR s = L"hello world";
_bstr_t bstr_t(s);
std::string str(bstr_t);

 

QString 转 BSTR

方法一:

QString qstr;
BSTR bstr = SysAllocString((OLECHAR*)qstr.unicode());

 

方法二:

BSTR str = (BSTR)(LPCWSTR)qstr.data();

 

QString 转 char*

// 方法一
QString str;
char* ch;
QByteArray ba = str.toLatin1();
ch = ba.data();


// 方法二
std::string str = QString("zhangsan").toStdString();
const char* ch = str.c_str();

 

 

 

BSTR 转 QString

方法一:

QString Demo::bstrToqstring(BSTR bstr)
{
    char buf[260] = { 0 };
    int len = WideCharToMultiByte(CP_ACP, 0, bstr, wcslen(bstr), NULL, 0, NULL, NULL);
    WideCharToMultiByte(CP_ACP, 0, bstr, wcslen(bstr), buf, len, NULL, NULL);
    return QString(buf);
}

 

方法二:

// 获取并显示友好名称
WCHAR *aa = EloamGlobal_GetFriendlyName(1, 0);
QString s = QString::fromWCharArray(aa);

 

方法三:

BSTR data = EloamGlobal_GetBarcodeData(0x02);
QString str_InvocrNo = QString::fromStdWString(data);

 

posted @ 2021-09-04 23:11  十一的杂文录  阅读(337)  评论(0编辑  收藏  举报