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();
}