gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:47:43 30 4
gpt4 key购买 nike

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

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

您可以像 reverse 那样完全颠倒位集顺序,也可以颠倒 reverse16 所基于的字节。

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

关于c++将二进制字符串从小端转换为大端(反转位),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35190518/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com