EOS transfer memo 格式化
由于一些场景比如转账后做某些操作,需要利用memo 传递多个参数信息
一般会以各种分隔符,如‘-’,‘|’,‘#’,空格等,所以需要个简单的方法格式化下
#ifndef __UTILS_HPP__
#define __UTILS_HPP__
#include <string>
#include <vector>
using namespace std;
void split(const string& s, char c,
vector<string>& v) {
string::size_type i = 0;
string::size_type j = s.find(c);
while (j != string::npos) {
v.push_back(s.substr(i, j-i));
i = ++j;
j = s.find(c, j);
if (j == string::npos)
v.push_back(s.substr(i, s.length()));
}
}
#endif
比如memo 格式为“id:value”
测试代码如下
//去掉memo前面的空格
memo.erase(memo.begin(), find_if(memo.begin(), memo.end(), [](int ch) {
return !isspace(ch);
}));
//去掉memo后面的空格
memo.erase(find_if(memo.rbegin(), memo.rend(), [](int ch) {
return !isspace(ch);
}).base(), memo.end());
vector<string> v;
split(memo, ':', v);
eosio_assert(v.size() == 2, "size need 2");
uint32_t id = std::strtoul(v[0].c_str(), NULL, 10);
uint64_t value = std::strtoull(v[1].c_str(), NULL, 10);