Shannon-Fano コーディング アルゴリズムを実装しており、シンボル コードをビットとして出力したいと考えています。
たとえば、次のコードでは、入力ファイル (ストリーム) からシンボルを 1 行ずつ読み取り、アルゴリズムによって形成された(からの) シンボル コードfin
で を埋めてから、 の内容で を構築します。次に、ビットセットを出力しようとしましたが、出力ファイルでは、ビットセットの「true」または「false」の各値が 1 ビットではなく 1 バイトを占めます。std::string
std::map<unsigned short, std::string> symbolCodes
boost::dynamic_bitset
currentOutString
if (fin.is_open() && fout.is_open()) {
std::string currentInString;
std::string currentOutString;
while (getline(fin, currentInString)) {
boost::dynamic_bitset<> bitSet;
for (auto & ref : currentInString) {
currentOutString += symbolCodes[ref];
}
for (auto & ref : currentOutString) {
if (ref == '0') bitSet.push_back(0);
if (ref == '1') bitSet.push_back(1);
}
fout << bitSet;
bitSet.clear();
currentOutString.erase();
}
}
fout
ストリームはstd::ios_base::binary
モードで開かれます。たとえば、「ファイル」という単語があり、コードはe: 00, f: 01, i: 10, l: 11
. ビットセットを出力して、出力ファイルが 8 バイトではなく 8 ビットを占めるようにするにはどうすればよいですか?
ご協力いただきありがとうございます。言葉の間違いの可能性があることをお詫び申し上げます。