1

我正在与计算机控制的泵进行一些串行端口通信,而我用来通信的 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)?

谢谢。

4

5 回答 5

5

如果您说的是只需要一个 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;
}
于 2011-03-31T17:24:24.983 回答
1

对 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;
}

与 strlen 不同的是, unistrlen 将在字符串中返回多少个字符(单字节或多字节字符),后者逐字节返回长度,如果字符串包含一些多字节字符,则可能会浪费一些内存。

于 2017-01-03T09:48:19.283 回答
0

我在 MSDN 中找到了一篇有用的文章 -如何:在各种字符串类型之间转换。我想它应该很有用。

于 2011-08-31T06:49:19.413 回答
0

您可以使用toWCharArray函数QString来获取 wchar_t* 值并从GetPumpSerialPortNumber函数返回 wchar_t*。

于 2010-09-15T09:27:14.980 回答
-1

QString::toWCharArray ( wchar_t * array )?

于 2010-09-15T09:24:39.603 回答