使用C/C++中的itoa将整数转换为二进制字符串

我可以使用itoa()将long long int转换为二进制字符串吗?
我已经看到了使用itoa将int转换为二进制的各种示例.如果我使用long long int,是否存在溢出或可能丢失精度的风险.

编辑 – 感谢大家的回复.我实现了我想做的事情. itoa()不够用,因为它不支持long long int.Moreover我不能在gcc中使用itoa(),因为它不是标准的库函数.

解决方法:

要将整数转换为仅包含二进制数字的字符串,可以通过使用一位掩码检查整数中的每个位来执行此操作,然后将其附加到字符串.

像这样的东西:

std::string convert_to_binary_string(const unsigned long long int value,
                                     bool skip_leading_zeroes = false)
{
    std::string str;
    bool found_first_one = false;
    const int bits = sizeof(unsigned long long) * 8;  // Number of bits in the type

    for (int current_bit = bits - 1; current_bit >= 0; current_bit--)
    {
        if ((value & (1ULL << current_bit)) != 0)
        {
            if (!found_first_one)
                found_first_one = true;
            str += '1';
        }
        else
        {
            if (!skip_leading_zeroes || found_first_one)
                str += '0';
        }
    }

    return str;
}

编辑:

可以使用模板完成更常用的方法:

#include <type_traits>
#include <cassert>

template<typename T>
std::string convert_to_binary_string(const T value, bool skip_leading_zeroes = false)
{
    // Make sure the type is an integer
    static_assert(std::is_integral<T>::value, "Not integral type");

    std::string str;
    bool found_first_one = false;
    const int bits = sizeof(T) * 8;  // Number of bits in the type

    for (int current_bit = bits - 1; current_bit >= 0; current_bit--)
    {
        if ((value & (1ULL << current_bit)) != 0)
        {
            if (!found_first_one)
                found_first_one = true;
            str += '1';
        }
        else
        {
            if (!skip_leading_zeroes || found_first_one)
                str += '0';
        }
    }

    return str;
}

注意:static_assert和std :: is_integral都是C 11的一部分,但Visual C 2010和GCC都支持至少4.4.5.

上一篇:cause java.lang.NoSuchMethodError: io.opentracing.ScopeManager.activeSpan()Lio/opentracing/Span;


下一篇:C/C++ atol函数- C语言零基础入门教程