Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034 #ifndef STRINGUTILITIES_HPP_
00035 #define STRINGUTILITIES_HPP_
00036 #include <string>
00037 #include <sstream>
00038
00039 namespace labust
00040 {
00041 namespace tools
00042 {
00050 inline std::string chomp(std::string& main, const char token = ',')
00051 {
00052 int pos=int(main.find(token));
00053 std::string part=main.substr(0,pos);
00054 main.erase(0,pos + (pos != -1));
00055 return part;
00056 }
00067 template <class MyType>
00068 inline std::string to_string(MyType value)
00069 {
00070 std::stringstream out;
00071 out.precision(6);
00072 out<<std::fixed<<value;
00073 return out.str();
00074 }
00083 inline unsigned char getChecksum(const unsigned char* const data, size_t len)
00084 {
00085 unsigned char calc = 0;
00086 for (size_t i=0; i<len; ++i){calc^=data[i];};
00087 return calc;
00088 }
00098 template <class Iterator>
00099 inline void binaryToHex(const Iterator& start, const Iterator& end, std::string* data)
00100 {
00101 static const char* hex_array = "0123456789ABCDEF";
00102
00103 for(Iterator it=start; it != end; ++it)
00104 {
00105 int v = (*it) & 0xFF;
00106 data->push_back(hex_array[v >> 4]);
00107 data->push_back(hex_array[v & 0x0F]);
00108 }
00109 }
00119 template <class Iterator, class Stream>
00120 inline void binaryToHex(const Iterator& start, const Iterator& end, Stream& data)
00121 {
00122 static const char* hex_array = "0123456789ABCDEF";
00123
00124 for(Iterator it=start; it != end; ++it)
00125 {
00126 int v = (*it) & 0xFF;
00127 data<<hex_array[v >> 4]<<hex_array[v & 0x0F];
00128 }
00129 }
00139 template <class Iterator>
00140 inline void hexToBinary(const std::string& data,
00141 const Iterator& start, const Iterator& end)
00142 {
00143 Iterator it(start);
00144 int temp(0);
00145 std::stringstream t;
00146 for(int i=0; i<data.size()/2; ++i,++it)
00147 {
00148 if (it == end) break;
00149 t<<data[2*i]<<data[2*i+1];
00150 t>>std::hex>>temp;
00151 t.str("");
00152 *it = temp;
00153 }
00154 }
00164 template <class IteratorIn, class OutVector>
00165 inline void hexToBinary(const IteratorIn& instart, const IteratorIn& inend,
00166 OutVector* out)
00167 {
00168 int temp(0);
00169 for(IteratorIn it=instart;
00170 it != inend; ++it)
00171 {
00172 std::stringstream t;
00173 t<<*it;
00174 if (++it == inend) break;
00175 t<<*it;
00176 t>>std::hex>>temp;
00177 out->push_back(temp);
00178 }
00179 }
00180 }
00181 }
00182
00183 #endif