如何将来自QFile::readAll()
的QByteArray
转换为uint8_t
数组(uint8_t*
)?
我尝试了static_cast<>()
,但似乎对整个阵列都不起作用。
我对static_cast
所做的事情的例子:
uint8_t* x = new uint8_t;
x[0] = static_cast<uint8_t>(testWav.readAll()[0]);
uint8_t* x = new uint8_t;
*x = static_cast<uint8_t>(*testWav.readAll());
等等都不起作用
2条答案
按热度按时间f0brbegy1#
我认为首先你需要知道指针不是数组,而且你不能把一个c-数组作为一个整体来赋值。
那么,如果您真的需要转换任何东西,那么您应该重新考虑。
QByteArray
通过它的data
成员赠款您对底层数组的访问权限。(我发现QByteArray
基于char
而不是unsigned char
有点不幸,因此您需要检查char
是否有符号)。最后,如果仍然需要,可以编写一个循环,将
QByteArray
中的元素复制到另一个数组中。gcuhipw92#
这不是你想要的。
这种方法只复制数组中的[0]元素,其余的分配内存保持未初始化状态
这根本行不通:
QByteArray
是一个类类型的动态容器,所以你不能用static_cast
来访问数组中的数据,这是一个本质上不同的、不兼容的数据结构,而且你仍然只给第一个元素赋值:*x
是x[0]
的等价物。QByteArray
具有方法QByteArray::data()
,该方法返回指向char*
的指针:https://doc.qt.io/qt-6/qbytearray.html#datadata()
返回的指针不拥有类,而是指向类分配的内存,因此readAll()
返回的QByteArray
中包含的数据将在包含它的语句结束时停止存在,除非它被分配到更持久的存储:fileContent.size()
的结果将给予缓冲区的实际大小。请注意,在某些情况下,使用QByteArray比使用原始指针更方便。只有在必须使用某些API获取原始指针或面临某些性能问题时,才需要转换。