singlepost

Перевод символа в число и обратно (GNU C++) << На главную или назад  

При написании реализации шифра Виженера пришлось переводить символы в числа, т.е. по созданному массиву char построить массив int, в котором каждому символу будет поставлен его код. Попытка применить (int) или int() приводит к sigmentation fallout. Каак правильно?

6 ответов в теме “Перевод символа в число и обратно (GNU C++)”

  1. 6
    Иван Гончар ответил:

    Спасибо!

  2. 5
    Роман Дрындик ответил:

    Как вариант можно попробывать такую вот небольшую программу, которую я написал на Visual Studio 2008:

    #include "stdafx.h"
    #include "iostream.h"
    #include "conio.h"
    #include "stdio.h"
    #include "stdlib.h"

    int main(int argc, char* argv[])
    {
    unsigned int i;
    char *symb = NULL;
    symb = new char[5];

    symb[0] = 'A';
    symb[1] = 'B';
    symb[2] = 'C';
    symb[3] = 'D';
    symb[4] = 'E';

    cout<<"Char massiv: \n"<<endl;
    for(i=0;i<5;i++)
    {
    cout<<symb[i]<<" ";
    };

    cout<<"\n\n";
    cout<<"ASCII massiv: \n"<<endl;
    for(i=0;i<5;i++)
    {
    cout<<(unsigned int)symb[i]<<" ";
    };

    cin.ignore();
    delete[] symb;
    return 0;
    }

    Ключевая идея приводить не просто к типу int, а к типу usigned int, т.к по умолчанию int является знаковым типом, может GNU из-зи этого ругается хотя (хотя я не уверен). Вобщем попробуй так, если не получится, то еще что-нибудь придумаем )

  3. 4
    Сергей Канаев ответил:

    Я думаю можно и несколько иначе — через указатели — ведь какая разница на что ты указываешь (машине это безразницы). Например так (это только принцип — то что я здесь накалякаю может не работать)
    int *ch; //его и будем выводить как int
    int sz=sizeof(int);
    char mas[N]; // это нам нужно вывести
    int i;
    {
    ch=(&sz)+sz;// чтобы компилер не пищал — укажем на инт и перескочим
    //его его-же размером
    for (i=0; i<N/sz; i++)
    {
    printf (" %d ", (*ch));
    ch +=sz;
    }
    }

  4. 3
    Тоша Мартынов ответил:

    символ – 0×30 = само число, потом только тип преобразовать

  5. 2
    Тоша Мартынов ответил:

    а если надо именно строку в число, то atoi()

  6. 1
    Михаил Митрофанов ответил:

    Так на сколько я помню каждому символу и так соответствует ASCII код.
    Например такой код выведет просто все символы и код

    for(int i=0; i<255; i++)
    cout << (char)i << " = " << i << endl;

    Соответственно

    char c[255];

    for(int i=0; i<255; i++)
    c[i] = (char)i;
    for(int i=0; i<255; i++)
    cout << c[i] << " = " << (int)c[i] << endl;

    Выведет тоже все символы и коды но из массива, каждый элемент которого преобразован к инту.

Клуб программистов работает уже ой-ой-ой сколько, а если поточнее, то с 2007 года.