Я просто опубликую это как ответ. Это короче, безопаснее и, что самое важное, это сделано .
#include <string>
#include <bitset>
#include <type_traits>
// SFINAE for safety. Sue me for putting it in a macro for brevity on the function
#define IS_INTEGRAL(T) typename std::enable_if< std::is_integral<T>::value >::type* = 0
template<class T>
std::string integral_to_binary_string(T byte, IS_INTEGRAL(T))
{
std::bitset<sizeof(T) * CHAR_BIT> bs(byte);
return bs.to_string();
}
int main(){
unsigned char byte = 0x03; // 0000 0011
std::cout << integral_to_binary_string(byte);
std::cin.get();
}
Выход:
00000011
Изменено имя функции, хотя я не доволен этим ... у кого-нибудь есть хорошая идея?