Konwersja hex stringu do binarnych wartości

0

Hej, zakładam nowy wątek aby nie mieszać ale jest to dość powiązane jeszcze z tym wątkiem http://4programmers.net/Forum/C_i_C++/266910-c++_multitreading_dziala_wolniej czyli wielowątkowością i liczeniem tego sha256. Z tego co udało mi się obczaić to sha256 zwraca string o 32 znakach który jest reprezentacją wartości hexowej. Chce ten string skonwertować do binarnych wartości.

Znalazłem gdzieś w necie taką metodę która się tym zajmuje:

std::string hex2bin(std::string s) {
    std::string rc;
    int tmp;
    for (int i(0); i + 1 < s.length(); i += 2) {
        if (std::istringstream(s.substr(i, 2)) >> std::hex >> tmp) {
            rc.push_back(tmp);
        }
    }
    return rc;
}

jednak jest ona niezwykle wolna jak sami widzicie. Macie może jakiś pomysł na zrealizowanie tego zadania w optymalny sposób?

2

dodaj na początku rc.reserve((s.length()+1)/2) a powinno przyspieszyć.

1
std::string hex2bin(std::string s)
  {
   std::string rc;
   rc.reserve(s.length()/2);
   for(size_t i=0;i<s.length();)
     {
      int byte=0;
      for(int b=0;b<2;++b,++i)
        {
         byte<<=4;
         char ch=s[i];
         if(isdigit(ch) byte+=ch-'0'; else byte+=10+ch-'a'; // ewentualnie duże 'A'
        }
      rc.push_back(byte);
     }
   return rc;
  }

Ale wg mnie lepiej zobacz gdzie jest budowany ten string i podmień tam.

2

Tak przy okazji, użycie string do tego może być mylące. Lepiej użyj np. vector<uint8_t>.

1 użytkowników online, w tym zalogowanych: 0, gości: 1