8

我已经看到了很多关于这个的问题,但到目前为止,没有一个对我有用。

我已经尝试了 2 个最常见的答案,但我得到了同样的错误。

只是一个unsigned char buf[10];

这,

QByteArray databuf;
databuf = QByteArray::fromRawData(buf, 10); 

或这个,

QByteArray databuf;
databuf = QByteArray(buf, 10);

给我同样的错误,

error: invalid conversion from 'unsigned char*' to 'const char*' [-fpermissive]

有什么建议吗?

谢谢你

4

2 回答 2

10

这只是签名问题,所以这应该有效:

databuf = QByteArray(reinterpret_cast<char*>(buf), 10);

或者使用传统的 C 风格演员表:

databuf = QByteArray((char*)buf, 10);

这是您应该使用的众多讨论之一。

更简单的替代方法是unsigned从 的声明中删除buf,如果您出于其他原因不需要它。

请注意,如果您使用该fromRawData方法,它不会复制字节,因此最好确保buf不会过早超出范围。如果不确定,请不要使用它...

于 2013-03-11T11:23:39.823 回答
1

正如它所说,传递给的参数fromRawData应该是 a const char*,而不是 a unsigned char*。你可以让你的数组是一个数组const char

const char buf[10];

该数组可以转换为指向其第一个元素的指针,该元素将 a const char*,完全符合fromRawData预期。

于 2013-03-11T11:18:34.893 回答