Search code examples
c++bitwise-operatorsbit

Convert integer to bits


I have byte to binary string function,

std::string byte_to_binary(unsigned char byte)
{
    int x = 128;
    std::ostringstream oss;
    oss << ((byte & 255) != 0);

    for (int i = 0; i < 7; i++, x/=2)
       oss << ((byte & x) != 0);

    return oss.str();
}

How can i write an int to bits in same way? I don't want extra 0's at the beginning of binary string so that is why i can't figure out how to create a variable length each time. Also, i'm not using std::bitset.


Solution

  • I'll just post this as an answer. It is shorter, safer and, what's most important, it is done.

    #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();
    }
    

    Output:

    00000011

    Changed function name, though I'm not happy with that one... anyone got a nice idea?