#include "stringTools.hpp" uint8_t hexStringToByte(std::string const& in) { if(in.size() == 2) { return hexDigitToNum(in[0])*16 + hexDigitToNum(in[1]); } if(in.size() == 1) { return hexDigitToNum(in[0]); } else return 0; } int8_t hexDigitToNum(char car) { if(isNum(car)) return car - '0'; else if(car>='a' && car<='f') return car - 'a' + 10; else if(car>='A' && car<='F') return car - 'A' + 10; else return -1; } std::string byteToHexString(uint8_t const& byte) { std::string ret; ret += toHexDigit(byte/16); ret += toHexDigit(byte%16); return ret; } char toHexDigit(uint8_t const& num) { if(num>=0 && num<=9) { return '0' + num; } else if(num < 16) { return 'A' + num - 10; } else return 0; } std::string repeatString(std::string const& a, unsigned int n) { std::string ret; while(n>0) { ret += a; n--; } return ret; } std::string repeatChar(char a, unsigned int n) { std::string ret; while(n>0) { ret.push_back(a); n--; } return ret; } bool isAlpha(char a) { return (a>='a' && a<='z') || (a>='A' && a<='Z'); } bool isNum(char a) { return (a>='0' && a<='9'); } bool isHexdec(char a) { return isNum(a) || (a>='a' && a<='f') || (a>='A' && a<='F'); } bool equalNoCase(char a, char b) { if(a==b) return true; if(!isAlpha(a) || !isAlpha(b)) return false; return (a-b == 'a' - 'A') || (a-b == 'A' - 'a'); } bool equalNoCase(std::string const& st1, std::string const& st2) { if(st1.size()!=st2.size()) return false; for(unsigned int i=0; i const& vec, int first, int last, char separator) { if(last<0 || last >= (int) vec.size()) last=vec.size()-1; if(first<0) first=0; std::string ret; if(first <= last) { for(int i=first; i<=last-1; i++) { ret+=vec[i]; if(separator != 0) ret+=separator; } ret += vec[last]; } return ret; } int findInString(std::string const& in, char const find) { for(unsigned int i=0; i=33 && in<=126) out=true; return out; } std::string decapsulate(std::string const& in) { unsigned int i=0,j; while(i' && counter==0)) { if(in[i]=='\\') i++; if(in[i]=='<') counter++; if(in[i]=='>') counter--; i++; } } else { i=in.size()-1; while(i0 && !isRead(in[i])) { i--; } i++; } return in.substr(j,i-j); } std::string ridUnread(std::string const& in) { int i=0,j=in.size()-1; while( ((unsigned int) i)=0 && !isRead(in[j])) j--; if(i<=j) return in.substr(i, j-i+1); else return ""; } std::string readInString(std::string const& in, std::string const& name, unsigned int occurence) { bool found=false; std::string out=""; unsigned int i=0,j=0,reading=0; while(i readValue(std::string const& in, unsigned int occurence, int* rank) { std::string name=""; unsigned int i=0,j=0,reading=0; while(i=in.size()) { if(rank != nullptr) *rank=-1; return std::make_pair("",""); } if(i+1 < in.size() && in[i]=='/' && in[i+1]=='/') //ignore // comment { i+=2; while(iin.size()) i=in.size(); if(j>in.size()) j=in.size(); return std::make_pair(name, in.substr(j,i-j)); } } else /*On veut une autre occurence: passer cette valeur là*/ { reading++; i+=name.size()+1; unsigned int counter=0; if(i readList(std::string const& in) { unsigned int i=0,j=0,counter=0; std::vector out; while(i(); return out; } std::vector splitString(std::string const& in, char const delim, char encapsulator, char decapsulator) { std::vector out; if(delim!='\\' && delim!=encapsulator && delim!=decapsulator) { if(decapsulator==0) decapsulator=encapsulator; unsigned int i=0; while(i