【问题标题】:QByteArray convert to/from unsigned char *QByteArray 转换为/从无符号字符 *
【发布时间】:2012-01-20 10:26:01
【问题描述】:
QByteArray inArray = " ... ";
unsigned char *in = convert1(inArray);
unsigned char *out;
someFunction(in, out);
QByteArray outArray = convert2(out);

问题是如何正确进行这些转换(convert1 和 convert2)。 我无法更改 someFunction(unsigned char *, unsigned char *),但我必须在这里使用 QByteArray。

【问题讨论】:

    标签: qt type-conversion


    【解决方案1】:

    Qt 有非常棒的docs,你应该使用它们。

    如果 someFunction 没有修改或存储指向数据的指针,你可以使用这个:

    QByteArray inArray = " ... ";
    unsigned char *out;
    someFunction((unsigned char*)(inArray.data()), out);
    QByteArray outArray((char*)out);
    

    否则,您必须制作 QByteArray::data() 返回的 char* 的深层副本(有关代码 sn-p,请参阅文档)。

    【讨论】:

    • QByteArray outArray = QByteArray::fromRawData(out, strlen(out)); 如果你不打算使用out
    • 如果我使用 fromRawData,我会得到“从 'unsigned char*' 到 'const char*' 的无效转换”。所以我尝试了 QByteArray::fromRawData(reinterpret_cast(out), part.length()).
    • chalup 的解决方案似乎很好,我之前尝试过,但我遇到了错误。显然情况是在别的什么地方。
    【解决方案2】:

    如果someFunction 采用const char* 参数,则只需在QByteArray 类中使用ConstData()data()

    如果您需要char*,则可以使用 strdup()。这个方法就是这样做的

    char *strdup (const char *s) {
        char *d = malloc (strlen (s) + 1);   // Space for length plus nul
        if (d == NULL) return NULL;          // No memory
        strcpy (d,s);                        // Copy the characters
        return d;                            // Return the new string
    }
    

    更多信息在这里:strdup() - what does it do in C?

    【讨论】:

    • 这与 const 无关。这是关于未签名的。
    • I-N-D-E-E-D 那无符号字符呢?
    猜你喜欢
    • 1970-01-01
    • 2012-06-03
    • 2013-01-22
    • 2019-11-08
    • 1970-01-01
    • 2018-05-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多