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

发布于 2024-09-24 03:56:15 字数 629 浏览 5 评论 0原文

我正在与计算机控制的泵进行一些串行端口通信,并且用于通信的 createfile 函数需要将 com 端口名称解析为 wchar_t 指针。

我还使用 QT 创建一个表单并获取 QString 形式的 com 端口名称。

该 QString 转换为字符数组并指向如下:

   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)?

谢谢。

I am doing some serial port communcation to a computer controlled pump and the createfile function I used to communicate requires the com port name to be parsed as a wchar_t pointer.

I am also using QT to create a form and aquire the com port name as a QString.

This QString is converted to a char array and pointed to as follows:

   char* Dialog::GetPumpSerialPortNumber(){
   QString mystring;
   mystring = ui->comboBox_2->currentText();
   char * mychar;
   mychar = mystring.toLatin1().data();
   return mychar;

I now need to set my port number which is stored as a wchar_t* in my pump object. I do this by calling the following function:

   void pump::setPortNumber(wchar_t* portNumber){
       this->portNumber = portNumber;
   }

Thus how do I change my char* (mychar) into a wchar_t* (portNumber)?

Thanks.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

⊕婉儿 2024-10-01 03:56:15

如果您只是需要将 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;
}

If you're talking about just needing a char array to a wchar_t array, here's a solution for you:

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;
}
呆° 2024-10-01 03:56:15

对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不同,strlen按字节返回长度,如果字符串包含一些多字节字符,则可能会浪费一些内存。

An enhancement to leetNightshade's answer could be

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

Where unistrlen will return how many characters (single or multi bytes characters) in your string unlike strlen which returns the length byte by byte and that might waste some memory if your string contains some multi-byte characters.

将军与妓 2024-10-01 03:56:15

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

You can use the toWCharArray function of QString to have your wchar_t* value and return a wchar_t* from your GetPumpSerialPortNumber function.

萌吟 2024-10-01 03:56:15

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

I've found a helpful article in MSDN - How to: Convert Between Various String Types. I guess it should be useful.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文