gpt4 book ai didi

c++ - 将包含二进制数据的QByteArray传递给值函数

转载 作者:行者123 更新时间:2023-12-02 10:07:01 24 4
gpt4 key购买 nike

因此,我正在开发一个大型程序,该程序可以处理QByteArrays中存储的二进制数据。今天,我意识到当我通过值将QByteArray传递给函数时,例如

void myFunc(QByteArray data)
{
// Do stuff
}

如果我的QByteArray在二进制流的中间某处有一个0x0,例如 0xA5 0x20 0x04 0x00 0x52。当QByteArray传递给函数时,0x52被截断。

我想我可以将QByteArray按值简单地传递给函数,但是在某些情况下,我需要数组的副本(用于数据持久性或添加到队列等),但是不幸的是,我有很多行此类函数传递复制的QByteArrays的代码。

所以我想知道是否有任何方法可以重载赋值运算符(或使用其他方法)以在两个QByteArrays之间复制数据,而不会将0x00项视为以null终止的字符串字符。我试图找到解决此问题的最简单方法,而不必完全弄乱我的程序并重做所有功能。有没有我可以使用的更好的替代数据类型(我可以在其中进行快速查找/替换,或者可以将它们包装起来的某些功能?

更新:添加了简化示例以演示问题
int main(int argc, char *argv[])
{
QApplication a(argc, argv);

QByteArray data = QByteArrayLiteral("\xA5\x20\x04\x00\x52");

doStuff(data);

return a.exec();
}

void doStuff(QByteArray theData)
{
// theData will contain only 0xA5 0x20 0x04 0x00 if you look from in here
}

更新2:

确定,显然,在测试了上面的示例之后。它确实起作用。但是,我在一个线程中使用的真实场景,我需要测试更多。一旦我缩小问题范围,就会更新...

最佳答案

我不认为通过值传递QByteArray可以做任何事情,但是更像是如何初始化数组。考虑以下示例:

QByteArray data("\xA5\x20\x04\x00\x52");

qDebug( data.toHex() );

QByteArray data2;
data2.append( static_cast<char>( 0xA5 ) );
data2.append( static_cast<char>( 0x20 ) );
data2.append( static_cast<char>( 0x04 ) );
data2.append( static_cast<char>( 0x00 ) );
data2.append( static_cast<char>( 0x52 ) );

qDebug( data2.toHex() );

输出为:
a52004
a520040052

用一个在0终止处切掉的字符串初始化它。 QByteArray::toStdString()也是如此。

编辑:

正如弗兰克指出:
QByteArray data("\xA5\x20\x04\x00\x52", 5);

qDebug( data.toHex() );

确实会推出预期的结果:
a520040052

关于c++ - 将包含二进制数据的QByteArray传递给值函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59761398/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com