gpt4 book ai didi

c++ - 将 MAC 地址 std::string 转换为 uint64_t

转载 作者:可可西里 更新时间:2023-11-01 17:08:20 25 4
gpt4 key购买 nike

我有一个 std::string 中的十六进制 MAC 地址。将该 MAC 地址转换为 uint64_t 中保存的整数类型的最佳方法是什么?

我知道 stringstream、sprintf、atoi 等。我实际上用其中的前两个编写了一些转换函数,但它们看起来比我想要的更草率。

那么,谁能告诉我一个好的、干净的转换方式

std::string mac = "00:00:12:24:36:4f";

进入 uint64_t?

PS:我没有可用的 boost/TR1 设施,也无法将它们安装在实际使用代码的地方(这也是为什么我没有复制粘贴我的尝试之一,对此感到抱歉!)。所以请保留直接 C/C++ 调用的解决方案。如果您有有趣的 UNIX 系统调用解决方案,我也会感兴趣!

最佳答案

uint64_t string_to_mac(std::string const& s) {
unsigned char a[6];
int last = -1;
int rc = sscanf(s.c_str(), "%hhx:%hhx:%hhx:%hhx:%hhx:%hhx%n",
a + 0, a + 1, a + 2, a + 3, a + 4, a + 5,
&last);
if(rc != 6 || s.size() != last)
throw std::runtime_error("invalid mac address format " + s);
return
uint64_t(a[0]) << 40 |
uint64_t(a[1]) << 32 | (
// 32-bit instructions take fewer bytes on x86, so use them as much as possible.
uint32_t(a[2]) << 24 |
uint32_t(a[3]) << 16 |
uint32_t(a[4]) << 8 |
uint32_t(a[5])
);
}

关于c++ - 将 MAC 地址 std::string 转换为 uint64_t,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7326123/

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