Hatasız Kod Olmaz..

QBitArray ve QByteArray arası çevirmeler

bir text dosyasının içine "111111111111111111111" girip bu koda input olarak verdiğimizde kodun hatalı çalıştığını görüyoruz. ama "ali ata bak" için hatalı çalışmıyor. Hatayı bulamadım. Yardımlarınızı bekliyorum.

#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();
}
link | şikayet
Umarım yardımcı olacak arkadaşlar çıkar. - seyfullahkilic - 1021 gün önce
Yorum Yaz
1 Cevap

initialization problemi, fonksiyonun düzeltilmiş hali aşağıdadır.

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;
}
link| şikayet
Yorum Yaz

Soru Bilgileri

x 2

tarih

1021 gün önce

okunma

944 kez

Benzer Sorular

Benzer soru bulunamadı !
Tüm hakları saklıdır.
  KodHatasi.Com © 2014
Versiyon: 1.0 | 0.0740 sn