shared_ptr对于raw data的申请与释放
std::shared_ptr<uint8_t> _data(
new uint8_t[SHA512_DIGEST_LENGTH], std::default_delete<uint8_t[]>());
typedef std::shared_ptr<EC_KEY> sp_ecdsa_key;
sp_ecdsa_key key = std::shared_ptr<EC_KEY>(EC_KEY_new(), ::EC_KEY_free);
stringsteam的格式化输出
std::string digest::to_string() const {
std::stringstream s;
for (size_t i = 0; i < size() / 2; ++i) {
s << std::hex << std::setfill('0') << std::setw(2) << (_data.get()[i * 2] << 8 | _data.get()[(i * 2) + 1]);
}
return s.str();
}
string子串
string的子串也是通过从哪开始,有多长来算的
std::string::substr
string substr (size_t pos = 0, size_t len = npos) const;
字符串切分
std::vector<std::string> jws::tokenize(const std::string &text, char sep) {
std::vector<std::string> tokens;
std::size_t start = 0;
std::size_t end = 0;
while ((end = text.find(sep, start)) != std::string::npos) {
tokens.push_back(text.substr(start, end - start));
start = end + 1;
}
tokens.push_back(text.substr(start));
return tokens;
}
随机数填充
#include <iostream>
#include <algorithm>
#include <vector>
#include <random>
#include <functional>
int main()
{
std::vector<int> in;
in.resize(128);
std::random_device rnd_device;
// Specify the engine and distribution.
std::mt19937 mersenne_engine(rnd_device());
std::uniform_int_distribution<int> dist(0, 256);
auto gen = std::bind(dist, mersenne_engine);
std::generate(std::begin(in), std::end(in), gen);
for(auto x:in)
std::cout << x << " ";
return 0;
}
先写逻辑后声明变量