Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Zamiana STRING na UNSIGNED CHAR * i odwrotnie

Ostatnio zmodyfikowano 2018-01-22 00:09
Autor Wiadomość
155178
Temat założony przez niniejszego użytkownika
Zamiana STRING na UNSIGNED CHAR * i odwrotnie
» 2018-01-21 12:53:00
Witam.

Posiadam coś takiego :
C/C++
cout << endl << endl << "Podaj wiadomosc : ";
string message; cin >> message;
W jaki sposób zamienić string message na unsigned char*, a następnie z powrotem na string?

Załóżmy, że tworzę zmienną
unsigned char * test;
 i chcę do niej przypisać mojego stringa message, następnie zmieniam coś w *test i chcę wynik zapisać do
string res;
P-168862
YooSy
» 2018-01-21 13:22:26
Podaj przykłady danych wejściowych i wyjściowych.
P-168864
155178
Temat założony przez niniejszego użytkownika
» 2018-01-21 13:41:05
Wejściowe np. "WITAM".
Dalej chcę skorzystać z algorytmu djb2

C/C++
unsigned long
hash( unsigned char * str )
{
    unsigned long hash = 5381;
    int c;
   
    while( c = * str++ )
         hash =(( hash << 5 ) + hash ) + c; /* hash * 33 + c */
   
    return hash;
}
, ale wprowadzane dane muszę mieć w postaci unsigned char*.

Wyjściowe mogę zapisać do unsigned long, ale z ciekawości chciałbym dowiedzieć się jak zamienić unsigned char* na string.
P-168865
mateczek
» 2018-01-21 14:24:51
sobie przerób fuknkcje
C/C++
#include<string>
#include<iostream>
unsigned long hash( std::string str )
{
    unsigned long _hash = 5381;
    for( unsigned char znak: str )
         _hash =(( _hash << 5 ) + _hash ) + znak; /* hash * 33 + c */
   
    return _hash;
}

int main()
{
    std::string s = "witam";
    std::cout << hash( s );
}
P-168868
155178
Temat założony przez niniejszego użytkownika
» 2018-01-21 15:01:43
Błedy w powyższej funkcji :
 In function `long unsigned int hash(std::string)':
494 expected primary-expression before "unsigned"
494 expected `;' before "unsigned"
497 expected primary-expression before "return"
497 expected `;' before "return"
497 expected primary-expression before "return"
497 expected `)' before "return"
P-168869
mateczek
» 2018-01-21 15:53:29
wklej kod z błędem!!! ten który ja wkleiłem się kompiluje i uruchamia
https://ideone.com/jMHhfM

może włącz sobie c++11 w swoim IDE. Lub jeśli masz jakiś zabytkowy kompilator to zamień
for(element:tablica) na klasyczny for(int i=0;i<tablica.size();i++)

C/C++
#include<string>
#include<iostream>
unsigned long hash( std::string str )
{
    unsigned long _hash = 5381;
    for( int i = 0; i < str.size(); i++ ) {
        unsigned char znak = str[ i ];
        _hash =(( _hash << 5 ) + _hash ) + znak; /* hash * 33 + c */
    }
    return _hash;
}

int main()
{
    std::string s = "witam";
    std::cout << hash( s );
}
P-168874
Monika90
» 2018-01-21 19:49:27

z ciekawości chciałbym dowiedzieć się jak zamienić unsigned char* na string.
C/C++
const int n = 5;
unsigned char bytes[ n ] = { 0x45, 0x56, 0x67, 0x78, 0x89 };
std::string str( bytes, bytes + n );
P-168892
155178
Temat założony przez niniejszego użytkownika
» 2018-01-22 00:09:02
Dziękuję Wam za pomoc. Rzeczywiście korzystam z zabytkowego kompilatora, zamiana na klasyczny for pomogła.
P-168904
« 1 »
  Strona 1 z 1