jwtpp里面的各种代码小技巧

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;
}

先写逻辑后声明变量

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值