Convert string to binary

M

Matej Barac

I want to read a file then save it's binary data as a .txt with one's and
zero's representing the actual file's bits. So it could be later
reconstructed from that txt file. As of yet, I read the file into a string.

I've tried something with bitset but I can't seem to have it read a string.
 
D

David Harmon

On Mon, 31 Jan 2005 03:14:12 +0100 in comp.lang.c++, Matej Barac
I want to read a file then save it's binary data as a .txt with one's and
zero's representing the actual file's bits. So it could be later
reconstructed from that txt file. As of yet, I read the file into a string.

I've tried something with bitset but I can't seem to have it read a string.

What happened when you tried?
Where is your code?

This issue is covered in Marshall Cline's C++ FAQ. See the topic
"[5.8] How do I post a question about code that doesn't work
correctly?" It is always good to check the FAQ before posting. You
can get the FAQ at:
http://www.parashift.com/c++-faq-lite/

Compare:

#include <iostream>
#include <iterator>
#include <bitset>
using namespace std;
int main()
{
std::copy(istream_iterator<char>(cin),
istream_iterator<char>(),
ostream_iterator<bitset<8> >(cout, "\n"));
}
 
M

Matej Barac

On Mon, 31 Jan 2005 03:14:12 +0100 in comp.lang.c++, Matej Barac
I want to read a file then save it's binary data as a .txt with one's and
zero's representing the actual file's bits. So it could be later
reconstructed from that txt file. As of yet, I read the file into a string.

I've tried something with bitset but I can't seem to have it read a string.

What happened when you tried?
Where is your code?

This issue is covered in Marshall Cline's C++ FAQ. See the topic
"[5.8] How do I post a question about code that doesn't work
correctly?" It is always good to check the FAQ before posting. You
can get the FAQ at:
http://www.parashift.com/c++-faq-lite/

Compare:

#include <iostream>
#include <iterator>
#include <bitset>
using namespace std;
int main()
{
std::copy(istream_iterator<char>(cin),
istream_iterator<char>(),
ostream_iterator<bitset<8> >(cout, "\n"));
}

Sorry, but as I said I don't have any (working) code except the read/write
file part. I have some trouble with turning a string into a bitset.

Shouldn't the below work?

string input; // read from input file
bitset<10> bit((string) input);
cout << bit;

Compiles but produces a runtime error.
 
D

Dietmar Kuehl

David said:
std::copy(istream_iterator<char>(cin),
istream_iterator<char>(),
ostream_iterator<bitset<8> >(cout, "\n"));

Note that this will remove whitespaces or, more precisely, the bits
representing them: 'std::istream_iterator<T>' uses the formatted input
operations to read the data. By default, the formatted input functions
skip leading whitespace, even if they just read a single character.
Also, there is no guarantee that 'char' has exactly 8 bits: the
standard only guarantees that it has at least 8 bits. You might want to
use this instead:

/**/ std::copy(std::istreambuf_iterator<char>(std::cin)),
/**/ std::istreambuf_iterator<char>(),
/**/ std::eek:stream_iterator<
/**/ std::bitset<std::numeric_limits<char>::digits>
/**/ >(std::cout, "\n"));
 
D

David Harmon

On Mon, 31 Jan 2005 04:33:29 +0100 in comp.lang.c++, Matej Barac
Shouldn't the below work?

string input; // read from input file
bitset<10> bit((string) input);
cout << bit;

A string is a sequence of characters. You want to convert the
characters one by one, not the whole string at once.

//(E.g. Using a clunky loop instead of std::copy)

for(int i=0; i<input.size(); ++i) {
cout << bitset<8>(input) << '\n';
}
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,744
Messages
2,569,483
Members
44,903
Latest member
orderPeak8CBDGummies

Latest Threads

Top