c ++将二进制字符串从小端转换为大端(反转位)

时间:2016-02-04 00:40:27

标签: c++ bitset endianness

我正在寻找一种简单的方法将二进制字符串从小端转换为大端表示。 我正在使用bitset并找到了翻转\ reset \设置位的方法,但我正在寻找一种方法来简单地颠倒它们的顺序。 我试过几个帖子但没有成功。 请问有人可以提供帮助吗?

for (unsigned long i = 0; i < match.size(); ++i) {
            std::bitset<16> b(i);
            std::bitset<16> b_reversed = ~b;
            std::cout << i << '\t';
            std::cout << b << '\t';
            std::cout << b_reversed << '\t';
            std::cout << b_reversed.to_ulong() << '\n'; 
        }

1 个答案:

答案 0 :(得分:0)

template<size_t n>
std::bitset<n> reverse(std::bitset<n> &set)
{
    std::bitset<n> result;

    for (size_t i = 0; i < n; i++)
        result[i] = set[n - i - 1];

    return result;
}

std::bitset<16> reverse16(std::bitset<16> &set)
{
    unsigned short n = static_cast<unsigned short>(set.to_ulong());
    return std::bitset<16>((n >> 8) | (n << 8));
}

for (unsigned long i = 5234; i < 5238; ++i) 
{
    std::bitset<16> a(i);
    std::bitset<16> b = reverse16(a);   
    std::bitset<16> c = reverse(a);
    std::cout << a << '\t';
    std::cout << b << '\t';
    std::cout << c << '\n';
    std::cout << std::hex << a.to_ulong() << '\t';
    std::cout << std::hex << b.to_ulong() << '\t';
    std::cout << std::hex << c.to_ulong() << '\n';
}

您可以像反向那样完全反转bitset顺序,也可以根据reverse16执行的操作来反转它的字节数。

复制粘贴,观察他们的输出,让我知道你想要哪一个..