需要将char *(指针)转换为wchar_t *(指针)

时间:2010-09-15 09:16:11

标签: c++ qt pointers char wchar-t

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

感谢。

5 个答案:

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