如何将 64 位地址的 std::string 表示形式转换为 uint64_t?

Rou*_*per 4 c++

我有一个std::string以小端十六进制形式表示的 64 位内存地址。如何将其转换为uint64_t表示?

小智 5

#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;
}
Run Code Online (Sandbox Code Playgroud)

12345正如预期的那样,这会打印。

编辑:如果你想从小端转换为大端,那也是可能的:

#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;
}
Run Code Online (Sandbox Code Playgroud)

  • @RouteMapper [这是 2 个字节的数学计算](http://stackoverflow.com/questions/3916097/integer-byte-swapping-in-c),可轻松扩展为任意数量的字节。但是,如果你觉得懒惰,那就创建一个 `union { uint64_t i; uint8_t a[8]; }`,然后是`std::reverse(ua, ua + 8)`。 (2认同)