【发布时间】:2015-05-21 05:31:11
【问题描述】:
我使用我定义为 typedef gcry_sexp_t Blob 的 gcrypt struct gcry_sexp_t (https://fossies.org/dox/libgcrypt-1.6.3/structgcry__sexp.html)。
我得到一个字符串,例如 0069c570 并将其转换为 Blob (0x69c570)
- 将字符串转换为十六进制
- 将十六进制字符串放入向量中
- 尝试转换为 Blob(memcpy、向量迭代器、强制转换)
使用 memcpy、迭代器或强制转换的尝试没有奏效。有谁知道如何完成这项任务?
// Convert to Hex String
std::stringstream vstream;
vstream << std::hex << std::setw(2) << std::setfill('0');
for (size_t i = 0; size > i; ++i) {
vstream << static_cast<unsigned int>(static_cast<unsigned char>(value[i]));
}
std::string valuestr = vstream.str();
valuestr.replace(0, 2, "0x");
// Place into std::vector
std::transform(valuestr.begin(), valuestr.end(), valuestr.begin(), ::tolower);
std::vector<char> bytes(valuestr.begin(), valuestr.end());
bytes.push_back('\0');
char *rcvdblob = (char *)&bytes[0];
// Attempt to convert to Blob
Blob rcvdpayload;
memcpy(&rcvdpayload, &bytes[0], sizeof(rcvdpayload));
for (std::vector<char>::iterator it = bytes.begin(); it != bytes.end(); ++it) {
std::cout << *it;
}
std::cout << std::endl;
rcvdpayload = *reinterpret_cast<Blob*>(rcvdblob);
【问题讨论】:
-
如果有什么问题可以用 C 比 C++ 更清楚、更简洁、更快速地解决,这就是它的典型代表。
标签: c++ vector type-conversion stringstream