为什么在交换基础整数后字符串中的值相同?
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;
}
字符串 out
和 out_reversed
具有完全相同的值,但我预计它会有所不同,因为基础整数 foo
和 foo_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另一种印刷方式。
我有一个 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;
}
字符串 out
和 out_reversed
具有完全相同的值,但我预计它会有所不同,因为基础整数 foo
和 foo_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另一种印刷方式。