Dezimal in Binär
-
Hej Freakz!
Ich hab ein kleines Problem bei der Umwandlung von dezimal in binär zahlen sprich bei der ausgabe.
Meine frage wieso gibt es printf("%x","%o") aber nichts für binär? Was kann ich da machen ?Würde mich über eine Antwort freuen...
º¿º Hever
-
Warum es das nicht gibt ist in der Tat eine gute Frage... ich bau mal eine Antwort und schieb's dann in die FAQ. Das kommt so oft...
const char* decimalToBinary(const long value, const unsigned length, char* pszBuffer) { if ( (length == 0) || (length > 32) ) { pszBuffer = '\0'; return pszBuffer; } unsigned digit = 1 << (length - 1); char* pszCurrent = pszBuffer; do { if (value & digit) { *pszCurrent = '1'; } else { *pszCurrent = '0'; } pszCurrent++; digit /= 2; } while (digit != 0); *pszCurrent = '\0'; return pszBuffer; }
1. Param: die Zahl
2. Param: Anzahl der Binärstellen (von 1..32)
3. Param: Zeiger auf ein char-Array, das den String aufnehmen kannUnter Verwendung der C++ Standardbibliothek kann man auch folgendes schreiben:
template <std::size_t NrOfBits> std::string DezToBin(unsigned long long Wert) { std::bitset<NrOfBits> AlsBits(Wert); return AlsBits.template to_string< std::string::value_type, std::string::traits_type, std::string::allocator_type >(); } // C++11: template <std::size_t NrOfBits> std::string DezToBin(unsigned long long Wert, char null = '0', char one = '1') { std::bitset<NrOfBits> AlsBits(Wert); return AlsBits.to_string(null, one); }
Benötigte Header: <string> und <bitset>.
[ Dieser Beitrag wurde am 27.10.2001 um 13:51 Uhr von Marc++us editiert. ]
Edit v. Arcoth: C++11 ergänzt und Code korrigiert.