【问题标题】:Assigning a string variable to an unsigned char variable将字符串变量分配给无符号字符变量
【发布时间】:2019-02-08 19:32:17
【问题描述】:

假设我有一个代表十六进制值的字符串 s:

string s="0x80";

我想将s的值赋给v,其中v定义为:

unsigned char v;

最简单的方法是什么?


我为什么需要它?因为在here 中,布隆过滤器表示为一个无符号字符向量,其中每个字符代表 8 位。我想访问每个字符,对其执行一些计算,然后以兼容的形式将其存储回来。此外,当我打印向量的每个元素(类型为 unsigned char)时,它以十六进制形式出现,例如3a、98等

【问题讨论】:

  • 为什么要涉及字符串? "vector of unsigned char" 不是字符串(直接用就行了)
  • 假设数字总是适合无符号字符,v = std::stoul(s, nullptr, 16);Documentation
  • 但这听起来更像是您实际上询问如何将数字转换为十六进制字符串......或者对数字如何存储在计算机中存在根本性的误解.

标签: c++ arrays hex


【解决方案1】:

将字符串转换为整数:

unsigned char num = std::stoi(s, nullptr, 0);

【讨论】:

  • 不应该将nullptr作为第二个参数传递,否则函数会默默地忽略一些错误
【解决方案2】:
  1. 从字符串构造一个std::istringstream
  2. 通过指示流包含十​​六进制格式的数据,从istringstream 中提取数字。
  3. 将号码分配给char

std::string s="0x80";
std::istringstream str(s);
int num;
str >> std::hex >> num;

unsigned char v = num;

【讨论】:

  • 请注意,这将忽略任何无效字符,例如"0x8G"会解析成功
猜你喜欢
  • 2013-02-23
  • 2022-06-15
  • 1970-01-01
  • 1970-01-01
  • 2013-11-13
  • 2019-02-20
  • 2013-04-18
  • 1970-01-01
  • 2014-11-19
相关资源
最近更新 更多