我正在与计算机控制的泵进行一些串口通信,而我用来通信的createfile函数需要将com端口名称解析为wchar_t指针。
我也在使用QT创建表单并获取com端口名称作为QString。
此QString转换为char数组,并指向如下:
char* Dialog::GetPumpSerialPortNumber(){
QString mystring;
mystring = ui->comboBox_2->currentText();
char * mychar;
mychar = mystring.toLatin1().data();
return mychar;
我现在需要设置我的泵号中存储为wchar_t *的端口号。我这样做是通过调用以下函数来实现的:
void pump::setPortNumber(wchar_t* portNumber){
this->portNumber = portNumber;
}
那么如何将我的char *(mychar)更改为wchar_t *(portNumber)?
感谢。
答案 0 :(得分:4)
如果你在谈论只需要一个char数组到wchar_t数组,这里有一个解决方案:
static wchar_t* charToWChar(const char* text)
{
size_t size = strlen(text) + 1;
wchar_t* wa = new wchar_t[size];
mbstowcs(wa,text,size);
return wa;
}
答案 1 :(得分:0)
您可以使用QString
的{{3}}函数获取wchar_t *值,并从GetPumpSerialPortNumber
函数返回wchar_t *。
答案 2 :(得分:0)
我在MSDN中找到了很好的文章 - How to: Convert Between Various String Types。我想这应该会有所帮助。
答案 3 :(得分:0)
对leetNightshade的答案的增强可能是
size_t unistrlen(const char *s) {
size_t sz = 0;
const char *sc;
for (sc = s; *sc != '\0'; sc+=(
((*sc&0x80)==0x80) ? 2 :/*1st byte of 2-byte character*/
((*sc&0xc0)==0xc0) ? 3 :/*1st byte of 3-byte character*/
((*sc&0xe0)==0xe0) ? 4 :/*1st byte of 4-byte character*/
((*sc&0xf0)==0xf0) ? 1 :/*2nd, 3rd, or 4th byte of multi-byte character*/
1) /*single byte character*/)
if ((*sc&0xf0)!=0xf0) sz++;
return sz;
}
wchar_t* charToWChar(const char* text) {
size_t size = unistrlen(text) + 1;
wchar_t* wa = new wchar_t[size];
mbstowcs(wa,text,size);
return wa;
}
其中unistrlen将返回字符串中的字符数(单字节或多字节字符),而不像strlen那样逐字节返回长度,如果字符串包含一些多字节字符,则可能会浪费一些内存。
答案 4 :(得分:-1)