C++ c++;将二进制字符串从低位转换为高位(反转位)

C++ c++;将二进制字符串从低位转换为高位(反转位),c++,bitset,endianness,C++,Bitset,Endianness,我正在寻找一种简单的方法,将二进制字符串从小端表示转换为大端表示。 我正在使用位集并找到了翻转\重置\设置位的方法,但我正在寻找一种简单地颠倒顺序的方法。 我试过几篇帖子,都没有成功。 有人能帮忙吗 for (unsigned long i = 0; i < match.size(); ++i) { std::bitset<16> b(i); std::bitset<16> b_reversed = ~b;

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

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'; 
        }
for(无符号长i=0;i模板
std::位集反转(std::位集和集)
{
std::位集结果;
对于(大小i=0;ireturn std::bitset((n>>8)|(n Big-endian vs.little-endian是关于字节的顺序,而不是位。
0x01 0x02
0x02 0x01
具有相反的端性。小端性的标准是什么?通常情况下,字节顺序颠倒,但字节内的位保持不变[并且是Big-endian]。
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';
}