2012-01-20 147 views
1
QByteArray inArray = " ... "; 
unsigned char *in = convert1(inArray); 
unsigned char *out; 
someFunction(in, out); 
QByteArray outArray = convert2(out); 

问题是我该如何正确地进行这些转换(convert1和convert2)。 我无法更改某些功能(无符号字符*,无符号字符*),但我必须在这里使用QByteArray。QByteArray转换为/无符号字符*

回答

5

Qt真的很棒docs,你应该使用它们。

如果someFunction不修改或存储指针数据,你可以这样做:

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

否则,你必须做出的char *通过的QByteArray ::数据()返回的深层副本(见代码片段的文档)。

+0

'的QByteArray outArray =的QByteArray :: fromRawData(出来,strlen的(出));'如果你不打算使用'out'。 – graphite

+0

如果我使用fromRawData,我得到“无效转换从'unsigned char *'到'const char *'”。所以我尝试了QByteArray :: fromRawData(reinterpret_cast (out),part.length())。 – Eddie

+0

chalup的解决方案似乎很好,我之前尝试过,但我得到了错误。显然,案件是在其他事情。 – Eddie

0

如果someFunction需要const char* ARGS就用ConstData()data()QByteArray类。

如果您需要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?

+0

这不是关于const。这是关于未签名的。 – user1319829

相关问题