C++ 将二进制字符串从小端转换为大端(颠倒位)

c++ converting a binary string from little to big endian (reverse the bits)

本文关键字:转换 二进制 字符串 C++      更新时间:2023-10-16

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

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'; 
        }
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';
}

您可以完全像反向一样反转位集顺序,也可以反转 reverse16 所基于的字节。

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