bits zu bytes
-
weiß niemand wie das geht? also ich will so etwas (keine ahnung, ob die angaben stimmen):
0 => 0
1 => 1
2 => 00
4 => 000
5 => 001
15 => 1111
...
...
...
-
Hallo,
also eigentlich wurde dir die Lösung für dieses Problem schon genannt, die STL-Klasse bitset kann auch das (hier 8 Bits):
// 15 Dezimal in binaer umwandeln, 8 Bits anzeigen.. std::bitset<8> bs(15); std::cout << bs.to_string() << std::endl;MfG
-
wie sieht sowas eigentlich im LowLevel aus?
also wie man aus einem Buchstaben einen Bitwertwert macht ist ja bekannt aber wie umgekehrt?
-
ich hab nochmal ne frage zur umwandlung in bits in char

könnte man nich zb einen void* pointer definieren, ihm den bit speicherbereich anvertrauen, und dann zu nem char* pointer umcasten?(oder direkt nen char pointer benutzen)
dann hätte man jedesmal die 8bits pro zeichen,und die müssten normalerweise auch richtig interpretiert werden, oder lieg ich da falsch?
-
hmm, komisch, wenn ich sowas mache:
std::bitset<8> bs(15); printf("%c\n", bs.to_string());dann kommt nur so ein komisches karo-teil heraus.
-
[edit]falsch[/edit]
-
Du solltest dich mal von printf trennen. Eigentlich geht es wirklich ganz einfach:
... bitset<8> bits( 15 ); cout << bits << endl; ...
-
ja, aber ich will das eigentlich gar nicht ausgeben, sondern an eine variable anhänge. im moment mache ich das so:
sprintf(buffer, "%s%c", buffer, bs.to_string());aber dann habe ich ja wieder dasselbe problem.
-
std::string kennt einen operator +
-
hm..vielleicht sollte ich doch auf c umsteigen

aber irgendwie klappt das eh nicht: wenn ich sowas habe:
std::bitset<8> bits(72); printf("%d\n", bits);dann kommt "72" raus, un nicht 001010 oder so.
-
Weisst du eigentlich, wofür %c, %d und %s bei printf stehen? Du benutzt irgendwie immer was anderes......
Machs doch einfach so:
#include <iostream> #include <bitset> using namespace std; int main() { bitset<4> bits( 15 ); string str; str = bits.to_string<char, char_traits<char>, allocator<char> >(); cout << str << endl; // Jetzt kannst an den string z. B. mit + was anhängen... }
-
oh mann, ich geh noch zu Grunde, ich hab das jetzt mal genau so übernommen, jetzt gibts 2 fehler:
1.: zeile 9: type 'char' unexpected
2.: zeile 10: binary '<<' : no operator defined which takes a right-hand operand of type 'class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >' (or there is no acceptabl
e conversion)
-
ok, jetzt noch ein Vorschlag:
#include <iostream> #include <bitset> #include <string> int main() { bitset<4> bs(15); string str; str = bs.to_string(); cout << str << endl; }jetzt will ich keine Klagen mehr hören (zumindest vom Compiler)

MfG
-
wo ist denn die "using namespace"-Zeile hin...
:#include <iostream> #include <bitset> #include <string> using namespace std; int main() { bitset<4> bs(15); string str; str = bs.to_string(); cout << str << endl; }MfG
-
Ja, sorry, Probe-Nutzers Vorschlag sollte jetzt aber laufen. Ich musste das mit dem char machen, weil mein Compiler sonst immer gemeckert hat. Hab ich vergessen dazu zuschreiben......

-
okay, jetzt bin ich endlich zufrieden

tausend dank an alle!
-
std::string kennt einen operator +
Standardmäßig nicht?
STLPort und MSVC haben den Operator nämlich implementiert.
MfG MAV
-
Wie standardmäßig nicht? Da steht "einen", nicht "keinen".....

-
und weiter gehts

kann man denn bei dem wert in den tag-zeichen ("<" und ">") keine variable verwenden? ich hab nämlich in einer variable die anzahl der benötigten bits gespeichert, aber wenn ich sie einsetze dann kommt ein fehler vom compiler, dass der wert in den klammern ungültig sei.
und wieso bleibt der verdammte compiler andauernd hängen?
-
Nein, das geht nicht. Es ist ein Template, und das muss zur Compilezeit feststehen.