008
08.10.2007, 18:12 Uhr
0xdeadbeef
Gott (Operator)
|
Ich würd dafür wohl direkt den vector<bool> benutzen, etwa in der Art:
C++: |
#include <algorithm> #include <fstream> #include <iostream> #include <iterator> #include <limits> #include <string> #include <vector>
class char_append { public: char_append(std::vector<bool> &vec) : vec_(vec) { }
void operator()(char c) { static std::size_t const cbits = std::numeric_limits<unsigned char>::digits;
vec_.resize(vec_.size() + cbits);
for(std::size_t i = 0; i < cbits; ++i) { vec_[vec_.size() - i - 1] = c >> i & 1; // gsb } }
private: std::vector<bool> &vec_; };
int main() { std::ifstream in("foo.txt", std::ios::binary); std::vector<bool> vec;
std::for_each(std::istreambuf_iterator<char>(in.rdbuf()), std::istreambuf_iterator<char>(), char_append(vec));
std::copy(vec.begin(), vec.end(), std::ostream_iterator<bool>(std::cout, "")); std::cout << std::endl; }
|
...allerdings frage ich mich ein bisschen, wofür du die Bitabfolge eigentlich brauchst - zumal die so oder so bezüglich der Stellung des kleinsten bzw. größten Bits nicht eindeutig ist. In aller Regel macht es mehr Sinn, mit Bytes zu arbeiten, und die, falls nötig, später auseinanderzupfriemeln. -- Einfachheit ist Voraussetzung für Zuverlässigkeit. -- Edsger Wybe Dijkstra |