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

[C++] Konwersja ciągu znaków na kod ANSI

Ostatnio zmodyfikowano 2013-07-30 21:06
Autor Wiadomość
MrDevilsh
Temat założony przez niniejszego użytkownika
[C++] Konwersja ciągu znaków na kod ANSI
» 2013-07-30 19:54:29
Witam,
ostatnio z braku zajęcia wymyśliłem sobie prosty program do zmiany tekstu na system binarny. Chciałem aby ciąg znaków był konwertowany na kod ANSI, wtedy zmieniany na system binarny. Nie mogłem dojść do tego jak zmienić string na int. Zwykły static_cast<int> nie pomagał, kompilator wyrzucał błąd. Użycie char i static_cast<int> dawało pożądany efekt lecz konwertował on tylko pierwszą literę ciągu znaków który się wpisywało. Poszukałem rozwiązania w internecie i znalazłem prostą funkcję do zmiany string na int. Wszystko było w porządku dopóki nie zauważyłem że nie zmienia na ANSI tak jak myślałem. Prosiłbym o przybliżenie sposobu w jaki można by to było rozwiązać. Załączam również kod:

C/C++
#include <iostream>
#include <string>
#include <sstream>

using namespace std;

int strToInt( string string )
{
    int tmp = 0, i = 0;
    bool m = false;
    if( string[ 0 ] == '-' )
    {
        m = true;
        i++;
    }
    for(; i < string.size(); i++ )
         tmp = 10 * tmp + string[ i ] - 48;
   
    return m ? - tmp: tmp;
}

int main()
{
    string StrTekst;
   
    int Liczba = 0;
    int Podstawa = 0;
    int Reszta = 0;
    int i = 0;
    bool Tablica[ 25 ];
   
    cout << "Wprowadz tekst: ";
    cin >> StrTekst;
   
    Liczba = strToInt( StrTekst );
    Podstawa = Liczba;
   
    while( Liczba > 0 )
    {
        Reszta = Liczba % 2;
        Tablica[ i++ ] = Reszta;
        Liczba = Liczba / 2;
    }
   
    cout << "Liczba " << Podstawa << " w zapisie binarnym to: ";
    while( i > 0 )
    {
        cout << Tablica[ i - 1 ];
        i--;
    }
   
    cout << endl;
    system( "pause" );
    return 0;
}
P-89066
killjoy
» 2013-07-30 20:05:39
W pętli odwołuj się do każdego kolejnego znaku stringa i rzutuj go do int, żeby odwołać się do konkretnego znaku string'a używa się operatora [].
P-89068
Admixior
» 2013-07-30 20:52:16
Normalnie ciąg znaków (jak wszystko inne) jest zapisane binarnie (liczbami). Więc "normalnie" jest to kodowanie ASCII. (patrz wikipedia)
ANSII to odmiana windowsowa która jest bardzo podobna. (patrz: http:/​/k_sidorczuk.republika.pl​/kodyasci.htm

Więc teraz pewnie rozumiesz że wyrażenie "konwertowanie ciągu znaków do ANSI" jest błędnie użyte. Skoro ciąg znaków jest w kodowaniu ASCII/ANSI.
Jeżeli nie używasz polskich znaków(oraz tych do sterowania systemem) to nie ma najmniejszej różnicy pomiędzy tymi dwoma kodowaniami.



Dalej:
Ciąg znaków string(klasa) jest to po prostu każdy znak w kodowaniu ASCII. Ta klasa zawiera dodatkowo takie zmienne jak rozmiar/rezerwacje pamięci, dynamicznie się alokuje itp...
Mając tę klasę nie możesz rzutować static_cast na int bo po prostu ta klasa nie ma takiego rzutowania.

Ciąg znaków c-string jest to "char*" lub "const char*" jest to czysta tablica. Prawidłowo jest to dowolnie długi ciąg znaków zakończony nullem. Tutaj nie masz rozmiaru, nie jest dynamicznie alokowana ani nic z tych rzeczy. Jest to sama tablica i jak  zadbasz żeby była prawidłowa i żeby operacje na niej przebiegały prawidłowo to będzie dobrze.
Można wskaźnika rzutować na typ int ale jedyne co zobaczysz to adres tego tekstu, gdzie po ponownym uruchomieniu programu będzie pewnie inny.


Przechodząc do twojego programu skoro masz tablice charów (liczb o wielkości 1-bajta w kodowaniu ASCII) to wystarczy że każdą z tych charow(bajtów) rzutujesz na int i wypiszesz.
P-89069
MrDevilsh
Temat założony przez niniejszego użytkownika
» 2013-07-30 21:06:39
Dziękuję za tak obszerną odpowiedź, przeczytam sobie dokładnie jeszcze raz i przerobię tak jak trzeba. Problem rozwiązany więc zamykam
P-89070
« 1 »
  Strona 1 z 1