将unsigned char[10]转换成QByteArray;

11

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

我尝试过两个最常见的答案,但是我得到了相同的错误。

只是一个 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]

你有什么建议吗?

谢谢

2个回答

14

这只是一个符号问题,所以这个应该可以工作:

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

或者使用传统的C风格转换:

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

(这里有很多讨论可以告诉你应该使用哪种。)

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

请注意,如果使用fromRawData方法,它不会复制字节,所以最好确保buf不会太快超出范围。如果不确定,请不要使用...


我需要它。我得到了“错误:从类型'unsigned char [10]'到类型'char *'的无效static_cast”。 - SamuelNLP
我的未编辑答案使用了 static_cast,这里是关于为什么它不起作用的相关问题链接:https://dev59.com/Hmkw5IYBdhLWcg3wE2hA - hyde

1
正如所述,传递给fromRawData的参数应该是const char *,而不是unsigned char *。您可以将数组设置为const char类型的数组:
const char buf[10];

数组可以转换为指向其第一个元素的指针,这将是一个const char*,正如fromRawData所期望的那样。


我应该创建一个新的char *array,先将数据从buf传递到数组中,然后再进行转换吗? - SamuelNLP

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