C++: bool Decode(const wxString& hash) { if (hash.Length() != MD4HASH_LENGTH * 2) { return false; } for ( size_t i = 0; i < MD4HASH_LENGTH * 2; i++ ) { unsigned char word = toupper(hash[i]); if ((word >= '0') && (word <= '9')) { word -= '0'; } else if ((word >= 'A') && (word <= 'F')) { word -= 'A' - 10; } else { // Invalid chars return false; } if (i % 2 == 0) { m_hash[i/2] = word << 4; } else { m_hash[i/2] += word; } } return true; } vs perl: sub hash_string { $i = 0; $final_string = ""; while ($i < 32) { $final_string = $final_string . &byte_string(hex(substr($_[0],$i,2))); $i += 2; } $final_string; }