繁体   English   中英

C ++将向量转换为2个十六进制,然后将其存储在字符串中

[英]C++ converting vector to 2 hex and then store it in a string

我主要使用C语言,所以我对C ++还是很陌生。 我想将int向量(std :: vector)转换为十六进制表示形式,然后将其存储到字符串中。 我在以下线程中找到了可以在C中使用的东西: 使用'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函数更可取吗? 非常感谢你的协助!

如果可以使用本机C ++进行任何处理,则可以使用任何内置函数代替C函数。 在c ++中,这比c函数更可取吗?

当然有办法,是更好的选择:

static std::array<unsigned char,16> digest;
static std::string hex_tmp;

for (auto x : digest) {
    std::ostringstream oss;
    oss << std::hex << std::setw(2) << std::setfill('0') << (unsigned)x;
    hex_tmp += oss.str();
}

我担心的一个问题是,由于sprintf可能会尝试在内容后添加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"前缀

这里有现场演示

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM