Możesz użyćBOOST_BINARY
podczas oczekiwania na C ++ 0x. :) BOOST_BINARY
ma zapewne przewagę nad implementacją szablonów, o ile może być używana również w programach C (jest w 100% sterowana przez preprocesor).
Aby to zrobić (np. Wydrukować liczbę w postaci binarnej), możesz użyć itoa
funkcji nieprzenośnej lub zaimplementować własną .
Niestety nie można zrobić podstawę 2 formatowania strumieni STL (ponieważ setbase
będzie tylko zasady honorowe 8, 10 i 16), ale można używać zarówno std::string
wersję itoa
, lub (w bardziej zwięzły, ale nieznacznie mniej wydajne) std::bitset
.
#include <boost/utility/binary.hpp>
#include <stdio.h>
#include <stdlib.h>
#include <bitset>
#include <iostream>
#include <iomanip>
using namespace std;
int main() {
unsigned short b = BOOST_BINARY( 10010 );
char buf[sizeof(b)*8+1];
printf("hex: %04x, dec: %u, oct: %06o, bin: %16s\n", b, b, b, itoa(b, buf, 2));
cout << setfill('0') <<
"hex: " << hex << setw(4) << b << ", " <<
"dec: " << dec << b << ", " <<
"oct: " << oct << setw(6) << b << ", " <<
"bin: " << bitset< 16 >(b) << endl;
return 0;
}
produkuje:
hex: 0012, dec: 18, oct: 000022, bin: 10010
hex: 0012, dec: 18, oct: 000022, bin: 0000000000010010
Zapoznaj się także z The Suther Formatters of Manor Farm Herb Suttera, aby uzyskać interesującą dyskusję.
00010000
to ósemkowe, prawda? (A w twojej deklaracji brakuje jakiegoś typu.)