added basic suisse id functions; refs #28
This commit is contained in:
@@ -11,6 +11,8 @@
|
||||
#include <string>
|
||||
#include <sstream>
|
||||
#include <iomanip>
|
||||
#include <stdexcept>
|
||||
#include <algorithm>
|
||||
|
||||
/*! @defgroup gcrypto Auxiliary Crypto-Functions */
|
||||
//@{
|
||||
@@ -65,6 +67,44 @@ namespace crypto {
|
||||
else
|
||||
return "\""+data+"\"";
|
||||
}
|
||||
|
||||
//! Convert binary to readable hexadecimal
|
||||
inline std::string binToHex(char c) {
|
||||
std::stringstream ss;
|
||||
ss<<std::hex<<std::setw(2)<<std::setfill('0')
|
||||
<<(unsigned int)(unsigned char)(c);
|
||||
return ss.str();
|
||||
}
|
||||
|
||||
//! Convert binary to readable hexadecimal
|
||||
inline std::string binToHex(const std::string& s) {
|
||||
std::string result;
|
||||
for (std::string::const_iterator c(s.begin()); c!=s.end(); ++c)
|
||||
result += binToHex(*c);
|
||||
return result;
|
||||
}
|
||||
|
||||
//! Convert readable lowercase hexadecimal to binary
|
||||
inline std::string hexToBin(std::string s) {
|
||||
const static std::string HEX("0123456789abcdef");
|
||||
std::transform(s.begin(), s.end(), s.begin(), ::tolower);
|
||||
if (s.size()%2)
|
||||
throw std::runtime_error
|
||||
("input string \""+s
|
||||
+"\" must have an even number of hexadecimal numbers");
|
||||
if (s.find_first_not_of(HEX)!=std::string::npos)
|
||||
throw std::runtime_error
|
||||
("input string \""+s+"\" has non hexadecimal value at position "
|
||||
+((std::stringstream&)(std::stringstream()
|
||||
<<s.find_first_not_of(HEX))).str());
|
||||
std::string res;
|
||||
for (std::string::const_iterator it(s.begin()); it!=s.end(); ++it) {
|
||||
unsigned char c(HEX.find(*it));
|
||||
if (++it!=s.end()) (c <<= 4) += HEX.find(*it);
|
||||
res += std::string(1, (char)c);
|
||||
}
|
||||
return res;
|
||||
}
|
||||
}
|
||||
|
||||
//@}
|
||||
|
Reference in New Issue
Block a user