[英]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.