将QByteArray转换为/从unsigned char *转换

5
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。

2个回答

7

Qt有非常好的文档,你应该使用它们。

如果someFunction不修改或存储指向输入数据的指针,您可以使用以下代码:

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

否则,您需要对QByteArray :: data()返回的char *进行深层复制(请参阅代码片段的文档)。

QByteArray outArray = QByteArray::fromRawData(out, strlen(out)); 如果您不打算使用 out - graphite
如果我使用fromRawData,会得到“从'unsigned char*'到'const char*'的无效转换”。所以我尝试使用QByteArray::fromRawData(reinterpret_cast<const char*>(out), part.length())。 - Eddie
Chalup提供的解决方案似乎很不错,我之前也尝试过,但是出现了错误。显然问题出在其他地方。 - Eddie

0

如果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() - C语言中的作用是什么?


这不是关于const的问题,而是关于unsigned的问题。 - user1319829
确实,那么无符号字符怎么办? - bliako

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接