gpt4 book ai didi

c++ - 交换 QByteArray 中的字节

转载 作者:行者123 更新时间:2023-11-28 03:16:26 27 4
gpt4 key购买 nike

我想写一个简单的函数来交换 QByteArray 中的字节。这是我想出的:

int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);

QString t = "abcde";
QByteArray test;
test.append(t.at(0));
test.append(t.at(1));
test.append(t.at(2));
test.append(t.at(3));
test.append(t.at(4));

qDebug() << t;
qDebug() << QString(swapBytes(test,0,3));

return a.exec();
}

QByteArray swapBytes(QByteArray in, int swapOffset, int quantity) {
if (swapOffset < 0) {
return in;
}
if(quantity>(in.length()/2)) {quantity=in.length()/2;}
if(quantity < 1) {quantity=1;}
int k;
char buf[quantity];
char buf2[quantity];
qDebug() << quantity;
for (int i = 0; i + quantity*2 + swapOffset <= in.length(); i=i+2*quantity) {
k=i;
for(int b = 0;b<i+quantity;b++){
buf[b]=in.at(k);
buf2[b]=in.at(k+swapOffset+quantity);
k++;
}
qDebug() << buf;
qDebug() << buf2;
qDebug() << in;
in.replace(0,quantity,buf2);
qDebug() << in;
in.replace(quantity+swapOffset,quantity,buf);
}
return in;
}

出于某种原因,当我运行这段代码时,我得到以下输出:

abcde
ab(
cd
abcde
cdcde
cdab(e

括号从何而来?据我所知,每个字节只有一个字符,所以有什么问题吗?

最佳答案

您需要比数量多分配一个字节,以便为空终止符留出空间。试试这个:

char* buf = new char[quantity+1];
char* buf2 = new char[quantity+1];
memset(buf, 0, quantity+1);
memset(buf2, 0, quantity+2);

然后在你的函数返回之前,记得释放:

delete [] buf;
delete [] buf2;
return in;

或者,您可以只使用 QByteArray 代替 char 数组:

QByteArray buf(quantity, 0x00);
QByteArray buf2(quantity, 0x00);

这允许您跳过对 memset 的调用并避免担心释放。

与所有这些无关,请注意,您可以像这样从 QString 初始化 QByteArray:

QByteArray test = t.toAscii();

关于c++ - 交换 QByteArray 中的字节,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16742620/

27 4 0
文章推荐: c++ - 使用 boost::mpl::iter_fold 并从 boost::mpl::map 获取键的 boost::mpl::vector
文章推荐: c++ - 如何在 MS Visual C++ 中使用 Excel
文章推荐: c++ - 归档两个 .a 文件
文章推荐: html - IE 和 chrome 中的不同对齐方式(多个
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com