тогда энто попа. Ближайший "сосед" это char.. но это в win. А в linux мы используем юникод. тогда попутный вопрос," как перевести delphi Byte в с\c++ " ?
_________________ RETI ;рети-рети интеррапт, через шины данных тракт, через память, через порт, возвращайся в главный код @hobbyelectronics
если уж вы пишите для разных платформ, так и применяли бы одинаковый инструмент: и там и там С++/С или и там и там Delphi... тогда проблем было бы меньше...
кстати, в Delphi имеется тип WideChar и определенные функции для работы со строками из этих символов - как раз юникодовые...
_________________ если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе при взгляде на многих сверху ничего не меняется...
эмм.. то что я начал учиться программировать в ubuntu, это случайная случайность. но мне понравилось )) а задача перенести код с делфи на си, так чтобы он был предельно похож на оригинал.
так как в данном случае выкрутится ?
_________________ RETI ;рети-рети интеррапт, через шины данных тракт, через память, через порт, возвращайся в главный код @hobbyelectronics
у вас есть работающая дельфийская программа и данные, которые она правильно обрабатывает в винде, вам надо сделать ее аналог на Си, чтобы данные в линухе обрабатывались точно так же?
тогда вам надо в Сишной программе использовать типы данных, один в один совместимые с дельфийскими. боюсь, что это не тривиальная задача...
_________________ если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе при взгляде на многих сверху ничего не меняется...
хмм. не вотру почему сама функция не работает при вызове.
в общем, модифицировал я программу на делфи (добавил запись в файл), получил длину и сам массив:
Код:
length(data) = 40, len = 24 data in 7|156|30|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0 |0 |0|0|0|0|0|0|0|0|0|0|0|0|0|40| data out 7|156|30|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|7|156|30|0|0|0|0|0|0|0|0|0|0|0|0|0|40|
int main() { unsigned char data[] = {7,156,30,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,40}; //data in привел к беззнаковой длиной 1 байт int len = 24; union trec { unsigned char t[4]; long l; }; trec t;
unsigned long int chksum; unsigned long int ecx; int i=0; //тело. if (sizeof(data) < len+4) { cout<<"in.пи%%ец"<<endl; };
тебе надо поболее узнать о массивах в си. как они передаются в функции и т.д. в частности чтобы твоя функция была универсальной надо передавать указатель на массив с уже нужным размером. в твоем случае нужно передавать массив размеров (размер_данных+размер_crc).
наверно не стоит мучить мозг, а заранее определять длинну массива, и передавать его в функцию.. как вам идея ?
да. так будет правильней. только хочу предостеречь.
Код:
char data[]={1}; char *dt = data; // sizeof(data)=1, sizeof(dt)=4 или 8 в зависимости от архитектуры.
т.е. sizeof работает на уровне языка. она не может знать о размере массива по указателю ей переданному. она возвращает размер объекта. если ей передан массив как в первом случае, то будет размер массива. если указатель, то размер указателя.
sizeof(data) всегда равно размеру указателя на вашей архитектуре.
уверены? по-моему, sizeof(data) покажет размер массива в байтах, если при определении массива он был явно задан: int data[30]; sizeof(data) == 60; sizeof отличает массивы от прочих указателей...
_________________ если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе при взгляде на многих сверху ничего не меняется...
sizeof(data) всегда равно размеру указателя на вашей архитектуре.
уверены? по-моему, sizeof(data) покажет размер массива в байтах, если при определении массива он был явно задан: int data[30]; sizeof(data) == 60; sizeof отличает массивы от прочих указателей...
согласен. я не уточнил, что написал это для случая его функции с int data[]. data в том случае указатель на int.
теперь, если звезды мне благоприятствуют, не подскажите ли где найти вменяемый мануал по GMP ? мне нужно конкретно rsa.
Код:
Base10StringToFGInt('65537',e); Base256StringToFGInt(sD,d); // sD - строка которую следует зашифровать, Base256StringToFGInt(sM,m); // sM - rsa_key FGIntMontgomeryModExp(d,e,m,r); // само шифрование, результат в r FGIntToBase256String(r,sR); // преобразование к string;
мне нужно было переписать на си:
Код:
mpz_t m, e, d, r; mpz_init(m); mpz_init(e); mpz_init(d); mpz_init(r);
ты издеваешься, да? он хочет вторым аргументом дескриптор открытого файла, из которого он будет читать строку с данными. файлы открыть можно при помощи fopen, или указать stdin - в этом случае строку он будет читать со стандартного ввода, т.е. с терминала.
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 23
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения