#include <iostream>
#include <string>
#include <vector>
#include <sstream>
#include <algorithm>
#include <cstdint>
using namespace std;
vector<size_t> hexToNumBS(const string &srcStr) {
vector<size_t> v;
if ( srcStr.size() < 2 ) {
return v;
}
stringstream ss;
size_t code = 0;
for ( size_t i=1; i<srcStr.size(); i+=2 ) {
ss << hex << srcStr.substr(i-1, 2);
ss >> code;
v.push_back(code);
ss.clear();
}
return v;
}
string checksum(const string &str) {
vector<size_t> v = hexToNumBS(str);
u_int8_t cs = 0;
for ( size_t i=0; i<v.size(); i++ ) {
cs -= v[i];
}
stringstream ss;
ss << hex << static_cast<size_t>(cs);
string ret;
ss >> ret;
if ( ret.size() < 2 ) {
ret = "0" + ret;
}
else if ( ret.size() > 2 ) {
return "";
}
transform(ret.begin(), ret.end(), ret.begin(), ::toupper);
return ret;
}
int main() {
string fullOrigStr("102AE0007C0803A6382100084E8000209421FFE8CE");
cout << "Full original string: "
<< fullOrigStr << "\n";
string origStr = fullOrigStr.substr(0, fullOrigStr.size()-2);
cout << "Original string w/o checksum byte: " << origStr << "\n";
cout << "Calculated checksum: "
<< checksum(origStr) << "\n";
return 0;
}
воскресенье, 1 декабря 2013 г.
C++. Intel hex. Checksum calculation
Подписаться на:
Комментарии к сообщению (Atom)
Комментариев нет:
Отправить комментарий