我有一个std::string
表示小端,十六进制形式的64位内存地址。如何将其转换为uint64_t
表示?
答案 0 :(得分:3)
#include <sstream>
#include <string>
#include <iostream>
#include <iomanip>
#include <cstdint>
int main()
{
std::string s("0x12345");
std::stringstream strm(s);
std::uint64_t n;
strm >> std::hex >> n;
std::cout << std::hex << n << std::endl;
return 0;
}
按预期打印12345
。
修改:如果你想从little-endian转换为big-endian,那也是可能的:
#include <sstream>
#include <string>
#include <iostream>
#include <iomanip>
#include <algorithm>
#include <cstdint>
int main()
{
std::string s("0x12345");
std::stringstream strm(s);
union {
std::uint64_t n;
std::uint8_t a[8];
} u;
strm >> std::hex >> u.n;
std::reverse(u.a, u.a + 8);
std::cout << std::hex << std::setfill('0') << std::setw(16) << u.n << std::endl;
return 0;
}