Страница 3 из 386
Re: помогите с поиском ответа ( C си)
Добавлено: Пт ноя 12, 2010 11:15:57
Кислый
lix писал(а):
UPD: да. поспешил mpz_init_set_str нужна
mpz_init_set_str (mpz_ptr x, const char *str, int base)
трулляля. только вот ошибку все еще выдает, а хочется из ide компилить
Re: помогите с поиском ответа ( C си)
Добавлено: Пт ноя 12, 2010 12:39:16
lix
Кислый писал(а):в ide выдает эту непонятную ошибку
в какой иде? в настройках проекта надо указать что используется библиотека gmp. ну или в опциях линкеру.
Re: помогите с поиском ответа ( C си)
Добавлено: Пт ноя 12, 2010 12:59:56
Кислый
Code::Blocks IDE
gmp - системная либа.
а вот где ключик -lgmp прописать ?
Re: помогите с поиском ответа ( C си)
Добавлено: Пт ноя 12, 2010 13:06:36
lix
Кислый писал(а):Code::Blocks IDE
gmp - системная либа.
а вот где ключик -lgmp прописать ?
ниразу не видел эту среду. вот что нашел
http://wiki.codeblocks.org/index.php?ti ... s_exist.3F
Re: Вопросы по С/С++ (СИ)
Добавлено: Сб ноя 13, 2010 15:53:10
Кислый
lix,
Код: Выделить всё
mpz_init_set_str (mpz_ptr x, const char *str, int base)
base это у нас система счисления. верно ? т.е. :
base = 10, и можно использовать символы 0..9
base = 16, и можно использовать символы 16-иричной системы 0..F
а если мне нужно закодить например слово MAMA, то чему должно равняться base ? по логике вещей base = 256. да вот незадача.. выводит ошибку вроде
Исключение в операции с плавающей точкой
Re: Вопросы по С/С++ (СИ)
Добавлено: Сб ноя 13, 2010 17:14:26
Кислый
хмм.. max base = 32

Re: Вопросы по С/С++ (СИ)
Добавлено: Сб ноя 13, 2010 18:40:12
lix
я не понял, нафиг это все надо? gmp - это либа для работы с очень большими числами, например, для криптографии. кодировать этим слова... малость не то применение.
надо еще раз трэд прочитать...
Re: Вопросы по С/С++ (СИ)
Добавлено: Сб ноя 13, 2010 19:30:17
Кислый
ну дык.. не я это придумал. если в либе есть соответствующие функции (rsa) то почему бы и не воспользоваться ?
Re: Вопросы по С/С++ (СИ)
Добавлено: Сб ноя 13, 2010 20:21:01
lix
Кислый писал(а):ну дык.. не я это придумал. если в либе есть соответствующие функции (rsa) то почему бы и не воспользоваться ?
нет в gmp rsa, в ней есть функции, позволяющие реализовать rsa (умножение, деление по модулю). надо использовать другую либу, например openssl.
Re: Вопросы по С/С++ (СИ)
Добавлено: Сб ноя 13, 2010 20:48:03
Кислый
ВАЖНО и с ВАФОСОМ : вот давайте не будем спорить..

Re: Вопросы по С/С++ (СИ)
Добавлено: Сб ноя 13, 2010 22:05:36
lix
Кислый писал(а):ВАЖНО и с ВАФОСОМ : вот давайте не будем спорить..

да пожалуйста

только в мануале к gmp я не нашел ни одной функции прямо относящейся к шифрованию.
Re: Вопросы по С/С++ (СИ)
Добавлено: Вт ноя 16, 2010 20:46:33
O-LED
Извините, за "новое слово в языке Си"

но возможно ли как нибудь, применение русских букв в CИ, в частности в #define
например
Код: Выделить всё
#define Ё 14
#define Ж 16
#define И 18
#define К 20
text [4] = {Ё,Ж,И,К}
Наверное бред, но нужно закодировать кучу массивов содержащих русский текст, и былобы очень удобно "задефинить" все русские буквы, а потом просто собирать массивы русскими буквами
Re: Вопросы по С/С++ (СИ)
Добавлено: Вт ноя 16, 2010 23:00:08
ARV
O-LED писал(а):Извините, за "новое слово в языке Си"

но возможно ли как нибудь, применение русских букв в CИ, в частности в #define
например
Код: Выделить всё
#define Ё 14
#define Ж 16
#define И 18
#define К 20
text [4] = {Ё,Ж,И,К}
Наверное бред, но нужно закодировать кучу массивов содержащих русский текст, и былобы очень удобно "задефинить" все русские буквы, а потом просто собирать массивы русскими буквами
насколько я в курсе, нет компиляторов для AVR, поддерживающих подобные дефайны, хотя по слухам для компьютера MS VC такой финт допускет...
но скажите, зачем вам это?! ведь строка в Си инициализируется самым тривиальным способом:
Re: Вопросы по С/С++ (СИ)
Добавлено: Вт ноя 16, 2010 23:20:29
O-LED
чему тогда у меня будет равно например text[2] ???
Re: Вопросы по С/С++ (СИ)
Добавлено: Вт ноя 16, 2010 23:27:55
ARV
O-LED писал(а):чему тогда у меня будет равно например text[2] ???
ну едрен-батон! вы Си хоть мало-мало изучали? если
char text[] = "ЁЖИК"; то
text[2] равно
'И'
Re: Вопросы по С/С++ (СИ)
Добавлено: Ср ноя 17, 2010 00:34:27
O-LED
Так я в Си самоучка, учусь не по нотам а на слух, там подслушаю, там подсмотрю)))))
про такую возможность объявления переменных не знал.
А скажите, как тогда мне лучше объявить массив в котором используются только элементы с 192 по 223, а остальные не нужны (у знаков А-Я код 192-223) ?
Спасибо.
зы. какую книгу по Си для микроконтроллеров порекомендуете??
Re: Вопросы по С/С++ (СИ)
Добавлено: Ср ноя 17, 2010 01:09:36
avreal
ARV писал(а):
...
но скажите, зачем вам это?! ведь строка в Си инициализируется самым тривиальным способом:
Кстати, если строго, то полным аналогом посимвольной инициаизации со скобками { } будет
Код: Выделить всё
char text1[4] = {Ё,Ж,И,К}; // тут 4 можно было и не указывать, всё равно было бы 4
char text2[] = "ЁЖИК"; // тут в массиве будет ограичитель '\0' и будет 5 элементов массива
char text3[4] = "ЁЖИК"; // а тут ограничителя не будет, массив размером 4 элемента
Иногда удобно, экономит место.
O-LED писал(а):А скажите, как тогда мне лучше объявить массив в котором используются только элементы с 192 по 223, а остальные не нужны (у знаков А-Я код 192-223) ?
Ну как-то так:
Код: Выделить всё
enum { start_char = 'А', end_char = 'Я', total_chars = end_char - start_char +1 };
const char array[total_chars] = { ... };
inline char get_from_array( char ch)
{
if( ch < start_char || ch > end_char ) return ch; // при уверенности в том, что не передадут «запредельное», эту строку можно и убрать
return array[ ch - start_char ];}
Задумчиво, но иначе никак не сэкономить на массиве. Это не паскаль, чтобы границы индекса массива указать. Хотя паскаль тут только строки текста программы сэкономит, в коде лучше не будет.
O-LED писал(а):зы. какую книгу по Си для микроконтроллеров порекомендуете??
И чернила для 8-го класса.
Сначала нужна книжка по языку С, чтобы в голове порядок был. Потом в документации на конкретнй компилятор смотреть его расширения и отклонения от стандарта.
Кстати, у тех компьютеров, на которых С рождался, было 64 килобайта адресного пространства, после вычета зоны устройств оставалось
максимум 56К под код и данные, а на целевой машине могло оказаться и 8К. atmega64 уже больше имеет, чем тогда было максимум, atmega8-atmega16 имеют столько, сколько тогда было в типичной управляющей машинке.
Re: Вопросы по С/С++ (СИ)
Добавлено: Ср ноя 17, 2010 07:36:52
asteroid7
avreal писал(а):Код: Выделить всё
char text1[4] = {Ё,Ж,И,К}; // тут 4 можно было и не указывать, всё равно было бы 4
char text2[] = "ЁЖИК"; // тут в массиве будет ограичитель '\0' и будет 5 элементов массива
char text3[4] = "ЁЖИК"; // а тут ограничителя не будет, массив размером 4 элемента
Иногда удобно, экономит место.
А Вы проверяли это? А что за компилятор, который позволяет так делать?
По стандарту Си рабочий, в этом примере, только второй массив. В первом нужно символы заключать в одинарные кавычки, а третий ругнётся на размерность. Во все строки, а строка это двойные кавычки, компилятор должен помещать конец строки '\0'.
Re: Вопросы по С/С++ (СИ)
Добавлено: Ср ноя 17, 2010 09:58:43
Gudd-Head
avreal писал(а):Кстати, если строго, то полным аналогом посимвольной инициаизации со скобками { } будет
А как же символ конца строки '\0'?
Re: Вопросы по С/С++ (СИ)
Добавлено: Ср ноя 17, 2010 19:45:56
avreal
asteroid7 писал(а):А Вы проверяли это? А что за компилятор, который позволяет так делать?
По стандарту Си рабочий, в этом примере, только второй массив. В первом нужно символы заключать в одинарные кавычки, а третий ругнётся на размерность. Во все строки, а строка это двойные кавычки, компилятор должен помещать конец строки '\0'.
Ой, ну с одинарными кавычками — это просто среди ночи тупо копипастнул и не поправил, извините уж. В добитых своей рукой коментаиях '\0' в кавычки взял, а там — не исправил.
А что касается третьего массива — его обязан делать любой компилятор, претендующий на звание компилятора языка С.
По стандарту ANSI C89 (в более поздних другой номер параграфа, в ISO C99 это параграф 6.7.8 пункт 32, а стандарт ISO C90 == ANSI C89) строка как
инициализатор ведёт себя не так, как строка-
литерал. В литералах, имеющих тип
char*, отсылающий к неявному массиву
char[], концевой '\0' гарантируется, в инициализаторах — явно заданный размер массива может «не пустить» этот ноль в массив.
3.5.7 Initialization
...
Finally, the declaration
char s[] = "abc", t[3] = "abc";
defines ``plain'' char array objects s and t whose members are initialized with character string literals. This declaration is identical to
char s[] = { 'a', 'b', 'c', '\0' }, t[] = { 'a', 'b', 'c' };
А вот в C++ так нельзя и это одно из тонких отличий между языками
