C ++将向量转换为2 hex,然后将其存储在字符串中

时间:2017-09-10 20:25:37

标签: c++ vector hex printf

我一直在使用C,所以我对c ++很新。我想将int矢量(std :: vector)转换为十六进制表示,然后将其存储到字符串中。我在下面的帖子中找到了我将在C中使用的东西:Converting hex into a string using 'sprintf'

user411313提出的代码如下:

static unsigned char  digest[16];
static unsigned char hex_tmp[16];

for (i = 0; i < 16; i++) {
  printf("%02x",digest[i]);  
  sprintf(&hex_tmp[i], "%02x", digest[i]);  
}

我担心的一点是,由于sprintf可能会尝试在内容之后添加0,因此可能会在某些时候超出索引。另外,我想知道是否有任何方法可以使用本机C ++,也许可以使用任何构建函数而不是C函数。这在C ++中比c函数更可取吗?非常感谢你的协助!

2 个答案:

答案 0 :(得分:2)

  

如果有任何方法可以使用本机C ++,也许可以使用任何构建的函数代替C函数。这在C ++中比c函数更可取吗?

当然有一种方法,是的,它更可取:

>>> data[:10]
[('Jordan Retro 1 HI OG', ('1', 'Aug')), ("Kids' Jordan Retro 1 HI OG", ('1', 'Aug')), ('Jordan Retro 1 HI OG', ('1', 'Aug')), ("Kids' Jordan Retro 1 HI OG", ('1', 'Aug')), ('Nike Kobe A.D. NXT', ('1', 'Aug')), ('Nike Dualtone Racer', ('1', 'Aug')), ('Nike Duelist Racer', ('1', 'Aug')), ('Jordan Super.Fly 2017', ('3', 'Aug')), ("Kids' Jordan Super.Fly 2017", ('3', 'Aug')), ('Nike Air VaporMax Flyknit', ('3', 'Aug'))]
  

我担心的一个问题是,由于sprintf可能会尝试在内容之后添加0,因此可能会在某些时候超出索引。

这是一个有效的问题。我上面的代码片段中使用的类将克服所有这些问题,您无需关心。

答案 1 :(得分:0)

您可以使用std::stringstream

std::string hex_representation(const std::vector<int>& v) {
  std::stringstream stream;
  for (const auto num : v) {
    stream << "0x" << std::hex << std::setw(2) << std::setfill('0') << num
           << ' ';
  }
  return stream.str();
}

显然,如果您不需要,可以删除"0x"前缀

Here a live demo