为什么在交换基础整数后字符串中的值相同?

Why same values inside string even after swapping the underlying integer?

我有一个 64 位无符号整数,出于某种原因我必须将它存储在一个字符串中。我想知道的是,即使使用交换后的整数,字符串中的值仍然相同吗?

例如:

#include <iostream>
#include <byteswap.h>

using namespace std;

int main()
{
    uint64_t foo = 98;

    uint64_t foo_reversed = bswap_64(foo);
    
    std::string out = "";
    out.append(reinterpret_cast<const char*>(&foo), sizeof(foo));

    std::string out_reversed = "";
    out_reversed.append(reinterpret_cast<const char*>(&foo_reversed), sizeof(foo_reversed));
    
    std::cout << "out: " << out << std::endl;
    std::cout << "out_reversed: " << out_reversed << std::endl;

    return 0;
}

字符串 outout_reversed 具有完全相同的值,但我预计它会有所不同,因为基础整数 foofoo_reversed 是交换值彼此。

我在这里错过了什么?如果这是一个微不足道的错误,请原谅我,但把它放在这里是因为我可能会遗漏一些概念。

我看到的输出:

out: b
out_reversed: b

我没想到 out_reversed

会出现上述值

你可以看到 char:

数组的相同情况
int main()
{
    char foo[8] = { 98, 0, 0, 0, 0, 0, 0, 0 };
    char foo_reversed[8] = { 0, 0, 0, 0, 0, 0, 0, 98 };
    
    std::string out(foo, 8);
    std::string out_reversed(foo_reversed, 8);

    std::cout << "out: " << out << std::endl;
    std::cout << "out_reversed: " << out_reversed << std::endl;

    return 0;
}

值为0的char不可打印,所以终端不显示

Here's另一种印刷方式。