bits zu bytes
-
okay, ich habs jetzt trotzdem mit malloc gemacht

allerdings gibts wieder probleme:
ich deklariere die variable so:
char *buffer = (char *) malloc(8*strlen(text));dann füge ich mit einer schleife immerwieder einen string an:
buffer = strncat(buffer, code, 8*strlen(text));wenn ich dann allerdings den buffer ausgeben will:
printf("%s\n", buffer);dann wird zwar der inhalt des buffers ausgegeben, aber davor noch zig "=" und 4 "²". woran liegt das denn?
-
Wenn Du Speicher allocierst kann dieser irgendwelche Werte beinhalten.
Du müsstest also mit memset noch mal den Speicher leerenoder Dir das leben viel Einfacher machen und std::string verwenden.
-
Du programmierst hier ja fast nur mit C, wenn du C++ programmieren willst, solltest du new, delete, string, stringstream und all die Anderen verwenden, die Vorteile liegen auf der Hand und weniger Probleme hast du dann auch.
MfG MAV
-
okay, ich hab eben nur C gelernt, muss ich mich eben umstellen.
jetzt kommt das nächste problem: wie kann ich die bytes in bits umwandeln? also die zahl "15" soll dann z.B. einen vier-stelligen binary-string ergeben, die zahl 3 einen 2 stelligen usw.
-
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!