gpt4 book ai didi

c++ - QBitArray 到 QByteArray

转载 作者:可可西里 更新时间:2023-11-01 18:29:45 26 4
gpt4 key购买 nike

当我们用这个文本“ali ata bak”创建一个文本文件时,我们使用这个文件作为程序的输入。代码运行正常。但是当我们在文本文件中输入“1111111111111111111111”这个文本时,代码没有按预期运行。那么问题是什么?

#include <QtCore/QCoreApplication>
#include <QBitArray>
#include <QByteRef>
#include <QFile>
#include <iostream>
#include <stdlib.h>
#include <QTextStream>

// Buffer Size #num of KB's
#define BUFFER_SIZE_KB 1

// Do not change !!
#define BUFFER_SIZE_BYTE BUFFER_SIZE_KB*1024
#define BUFFER_SIZE_BIT BUFFER_SIZE_BYTE*8

using namespace std;


QBitArray bytesToBits(QByteArray bytes) {
QBitArray bits(bytes.count()*8);
// Convert from QByteArray to QBitArray
for(int i=0; i<bytes.count(); ++i)
for(int b=0; b<8; ++b)
bits.setBit(i*8+b, bytes.at(i)&(1<<b));
return bits;
}


QByteArray bitsToBytes(QBitArray bits) {
QByteArray bytes;
bytes.resize(bits.count()/8);
// Convert from QBitArray to QByteArray
for(int b=0; b<bits.count(); ++b)
bytes[b/8] = ( bytes.at(b/8) | ((bits[b]?1:0)<<(b%8)));
return bytes;
}


int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
QString inFilename;
QString outFilename;
QTextStream qtin(stdin);


cout << "Filename : ";
qtin >> inFilename;
outFilename.append("_");
outFilename.append(inFilename);

QFile infile(inFilename);
if (!infile.open(QIODevice::ReadOnly)) {
cout << "\nFile cant opened\n";
system("pause");
return 1;
}

QFile outfile(outFilename);
if (!outfile.open(QIODevice::WriteOnly)) {
cout << "\nFile cant opened\n";
system("pause");
return 2;
}

QByteArray bytes, bytes2;
QBitArray bits;


while ((bytes = infile.read(BUFFER_SIZE_BYTE)) >0 ) {

bits = bytesToBits(bytes);
bytes2 = bitsToBytes(bits);// PROBLEM IS HERE
outfile.write(bytes2);

}

outfile.close();
infile.close();
cout << "Finished\n";
return a.exec();
}

最佳答案

初始化问题。

QByteArray bitsToBytes(QBitArray bits) {
QByteArray bytes;
bytes.resize(bits.count()/8+1);
bytes.fill(0);
// Convert from QBitArray to QByteArray
for(int b=0; b<bits.count(); ++b)
bytes[b/8] = ( bytes.at(b/8) | ((bits[b]?1:0)<<(b%8)));
return bytes;
}

这产生了正确的答案

关于c++ - QBitArray 到 QByteArray,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8776261/

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