Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/127.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ Qt-将(字节)变量写入文件_C++_Qt_Binaryfiles_Binary Data_Huffman Code - Fatal编程技术网

C++ Qt-将(字节)变量写入文件

C++ Qt-将(字节)变量写入文件,c++,qt,binaryfiles,binary-data,huffman-code,C++,Qt,Binaryfiles,Binary Data,Huffman Code,我在做哈夫曼编码。我不知道如何保存代码。我无法找到并保存变量字节。我找到了我需要的一切。现在开始我的问题。我想写数据文件(编码) void encode::getHuffmanTree(int*frek,QString*filetext){ QListCodes; 字符; 对于(inti=0;i0){//Karakter-varsa HuffmanTree*HuffmanCode=新的HuffmanTree(); 赫夫曼密码->弗里坎=弗里克[i]; 字符=(char)i; HuffmanCod

我在做哈夫曼编码。我不知道如何保存代码。我无法找到并保存变量字节。我找到了我需要的一切。现在开始我的问题。我想写数据文件(编码)

void encode::getHuffmanTree(int*frek,QString*filetext){
QListCodes;
字符;
对于(inti=0;i0){//Karakter-varsa
HuffmanTree*HuffmanCode=新的HuffmanTree();
赫夫曼密码->弗里坎=弗里克[i];
字符=(char)i;
HuffmanCode->karakter=字符;
附加代码(HuffmanCode);
}
qSort(Codes.begin()、Codes.end()、sortingHuffmanTree);
while(Codes.count()>1){
HuffmanTree*节点1(代码[0]);
HuffmanTree*节点2(代码[1]);
HuffmanTree*newnode=new HuffmanTree();
newnode->frekans=node1->frekans+node2->frekans;
newnode->isLeaf=false;
新建节点->左=节点1;
newnode->right=node2;
newnode->karakter=node1->karakter+node2->karakter;
node1->parent=node2->parent=newnode;
代码追加(newnode);
代码。删除一个(节点1);
代码。removeOne(节点2);
qSort(Codes.begin()、Codes.end()、sortingHuffmanTree);
}
代码[0]->root=true;
getHuffmanCode(代码[0]);
writedata(文件文本);
代码。清除();
}
这是我的写函数。问题就在这里

void encode::writedata(QString *filetext){
QMap<char,int>FrekMap;
QByteArray byteNum;
int numberMap;
for(int i=0;i<Char_Limit;i++){
    if(frekList[i]>0)
        FrekMap.insert(char(i),frekList[i]);
}
delete[] frekList;
numberMap=FrekMap.keys().count();
QFile writedata(ui->FileLoca->text()+"t");
if(!writedata.open(QIODevice::WriteOnly)){
    ShowMessage("File Error.Could not open...");
    return;
}
QTextStream out(&writedata);
out.setVersion(QDataStream::Qt_4_8);
out<<numberMap;//number of FrekMap.key
/* writing freq table */
    foreach(char sembol,FrekMap.keys()){
        out<<sembol<<FrekMap.value(sembol);
    }
/* writing encoding codes */
    for(int i=0;i<=filetext->size();i++){
        QString ch(filetext[0][i]);
        out<<CodeHash.value(ch);
    }
writedata.flush();
writedata.close();
}
void encode::writedata(QString*filetext){
QMapFrekMap;
QByteArray byteNum;
整数映射;
对于(int i=0;i0)
FrekMap.insert(char(i),frekList[i]);
}
删除[]frekList;
numberMap=FrekMap.keys().count();
QFile writedata(用户界面->文件定位->文本()+“t”);
如果(!writedata.open(QIODevice::WriteOnly)){
ShowMessage(“文件错误。无法打开…”);
返回;
}
QTextStream out(&writedata);
out.setVersion(QDataStream::Qt_4_8);

到底是什么不起作用?你期望它做什么?它到底在做什么,这是不正确的?void encode::writedata()函数问题。numberMap=4,我必须将byte numberMap写入文件,例如频率=70,所以代码是“001”。我如何将频率和代码字节写入文件。恐怕我理解起来有点困难。到底发生了什么不正确的事情?是否有错误消息?结果是什么?我没有错误消息。我的问题是我有我需要的所有信息(频率、代码…),但我不知道如何将格式(顺序、类型)写入文件。将字节(或可变长度的位序列?)存储到QByteArray,然后完成后,将QByteArray写入QFile文件,不要使用QTextStream或QDataStream。当您有独立于文件IO的单独编码步骤时,让它工作起来就容易多了。
void encode::writedata(QString *filetext){
QMap<char,int>FrekMap;
QByteArray byteNum;
int numberMap;
for(int i=0;i<Char_Limit;i++){
    if(frekList[i]>0)
        FrekMap.insert(char(i),frekList[i]);
}
delete[] frekList;
numberMap=FrekMap.keys().count();
QFile writedata(ui->FileLoca->text()+"t");
if(!writedata.open(QIODevice::WriteOnly)){
    ShowMessage("File Error.Could not open...");
    return;
}
QTextStream out(&writedata);
out.setVersion(QDataStream::Qt_4_8);
out<<numberMap;//number of FrekMap.key
/* writing freq table */
    foreach(char sembol,FrekMap.keys()){
        out<<sembol<<FrekMap.value(sembol);
    }
/* writing encoding codes */
    for(int i=0;i<=filetext->size();i++){
        QString ch(filetext[0][i]);
        out<<CodeHash.value(ch);
    }
writedata.flush();
writedata.close();
}