c++ - 使用 stringstreams 将字符串转换为 __uint128_t

标签 c++ string type-conversion istringstream

我正在尝试从字符串中提取不同类型的数据。

void                    readHeader(char buf[BUFFSIZE])
{
  std::istringstream    hdr(buf);
  __uint128_t           id_client;

  hdr >> id_client; // doesn't compile
}

当我执行 hdr >> id_client 时出现此错误:

Unix/UnixSocket.cpp:158:10: error: ambiguous overload for ‘operator>>’ in ‘hdr >> id_client’ Unix/UnixSocket.cpp:158:10: note: candidates are: In file included from /usr/include/c++/4.7/sstream:39:0,
                 from Unix/UnixSocket.cpp:11: /usr/include/c++/4.7/istream:118:7: note: std::basic_istream<_CharT,
_Traits>::__istream_type& std::basic_istream<_CharT, _Traits>::operator>>(std::basic_istream<_CharT, _Traits>::__istream_type& (*)(std::basic_istream<_CharT, _Traits>::__istream_type&)) [with _CharT = char; _Traits = std::char_traits<char>; std::basic_istream<_CharT,
_Traits>::__istream_type = std::basic_istream<char>] <near match> /usr/include/c++/4.7/istream:118:7: note:   no known conversion for argument 1 from ‘__int128 unsigned’ to ‘std::basic_istream<char>::__istream_type& (*)(std::basic_istream<char>::__istream_type&) {aka std::basic_istream<char>& (*)(std::basic_istream<char>&)}’ /usr/include/c++/4.7/istream:122:7: note: std::basic_istream<_CharT,
_Traits>::__istream_type& std::basic_istream<_CharT, _Traits>::operator>>(std::basic_istream<_CharT, _Traits>::__ios_type& (*)(std::basic_istream<_CharT, _Traits>::__ios_type&)) [with _CharT = char; _Traits = std::char_traits<char>; std::basic_istream<_CharT,
_Traits>::__istream_type = std::basic_istream<char>; std::basic_istream<_CharT, _Traits>::__ios_type = std::basic_ios<char>] <near match> /usr/include/c++/4.7/istream:122:7:

有什么方法可以将我的 id_client 正确存储在这个 __uint128_t 变量中吗?

最佳答案

https://gmplib.org/可能有帮助。 gmpxx 对象抽象的 mpz_class 类支持 I/O 运算符,而 mpz_export(...) 函数允许您将结果转换为字节数组。如果它们超过 16 个字节,您可能会抛出异常或以其他方式提示。不是很快,但我想实现起来很快。

关于c++ - 使用 stringstreams 将字符串转换为 __uint128_t,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26700672/

相关文章:

c++ - 如何使用 NASM 创建 .dll 文件?

c++ - std::sort 导致 operator< 中的段错误

c++ - 我怎样才能让这个递归链表反向工作?

python - 找到字符串中的大写字母并替换它

c# - Switch 语句字符串匹配但不起作用

c++ - tensorflow C++ : use array for feed_dict

c# - C#中的字符串排序

c# - 无法在 C# 中将枚举隐式转换为整数

c++ - C++中模板转换 `operator const T &`的属性是什么?

c# - 从 DataRow 获取 int 值而不转换为字符串