При написании реализации шифра Виженера пришлось переводить символы в числа, т.е. по созданному массиву char построить массив int, в котором каждому символу будет поставлен его код. Попытка применить (int) или int() приводит к sigmentation fallout. Каак правильно?
9 июля 2009 в 14:02
Спасибо!
9 июля 2009 в 11:03
Как вариант можно попробывать такую вот небольшую программу, которую я написал на 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 из-зи этого ругается хотя (хотя я не уверен). Вобщем попробуй так, если не получится, то еще что-нибудь придумаем )
9 июля 2009 в 10:02
Я думаю можно и несколько иначе — через указатели — ведь какая разница на что ты указываешь (машине это безразницы). Например так (это только принцип — то что я здесь накалякаю может не работать)
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;
}
}
9 июля 2009 в 10:00
символ – 0×30 = само число, потом только тип преобразовать
9 июля 2009 в 10:00
а если надо именно строку в число, то atoi()
9 июля 2009 в 10:00
Так на сколько я помню каждому символу и так соответствует 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;
Выведет тоже все символы и коды но из массива, каждый элемент которого преобразован к инту.