Спасибо тебе большое, а исходники можно?
» Вопросы по программированию на C/С++
kotlomoy
Не компилируется у меня твой пример.
Цитата:
А ещё удручает, что нужно написать 370 функций аналогов, что существует в AutoIt3 и 2000 дополнительных функций, что есть в AutoIt3 в UDF, которые бери да пользуйся, а тут сначала напиши их за несколько лет, потом пользуйся.
Не компилируется у меня твой пример.
Цитата:
А твой код падает, потому что ты забыл про завершающий ноль в строкепоставил завершающий '\0', также падает.
А ещё удручает, что нужно написать 370 функций аналогов, что существует в AutoIt3 и 2000 дополнительных функций, что есть в AutoIt3 в UDF, которые бери да пользуйся, а тут сначала напиши их за несколько лет, потом пользуйся.
AZJIO
Пример был исключительно под Visual Studio.
Если у тебя студия, значит ты наверное не пролинковал ws2_32.lib
А вообще, посмотри, на что ругается линкер и исправь
Пример был исключительно под Visual Studio.
Если у тебя студия, значит ты наверное не пролинковал ws2_32.lib
А вообще, посмотри, на что ругается линкер и исправь
Daniyar91
Я на всякий случай поискал Tiger на офсайте AutoIt3, и нашёл Tiger и даже Tiger2 - ссылка, он даже был у меня в коллекции, ссылка на архив
kotlomoy
Да на VS проверял... Видимо я его очень плохо знаю, потому что посмотрел уроки, там даже в режиме дебагинга выводит значения переменных, я всё не понимал как можно программировать если скрипт начинает работать только после того как он правильно написан, а написать сразу правильно (или даже после многократного перечитывания) просто нереально.
Я на всякий случай поискал Tiger на офсайте AutoIt3, и нашёл Tiger и даже Tiger2 - ссылка, он даже был у меня в коллекции, ссылка на архив
kotlomoy
Да на VS проверял... Видимо я его очень плохо знаю, потому что посмотрел уроки, там даже в режиме дебагинга выводит значения переменных, я всё не понимал как можно программировать если скрипт начинает работать только после того как он правильно написан, а написать сразу правильно (или даже после многократного перечитывания) просто нереально.
Спасибо, если все будет работать то хорошо, ведь в AutoIT я хоть что-то понимаю в отличии от C.
Daniyar91
Цитата:
Цитата:
если все будет работать то хорошоя проверил перед отпиской. Нужны файлы Hash39.dll, Hash39DLL.au3, HashTest.au3. Последний запускаешь, смотришь результаты в консоли.
нарыл я в сети такое:
Цитата:
Вот сам скрипт:
Код: // -----------------------------------------------------------------------------
char DecodeUppodText(char sData) {
variant char1, char2; int i;
variant Client_codec_a = ["D", "4", "l", "N", "o", "1", "I", "g", "T", "a", "X", "H", "Q", "w", "d", "k", "J", "5", "c", "L", "G", "x", "9", "Y", "e", "="];
variant Client_codec_b = ["3", "m", "p", "v", "W", "R", "n", "U", "y", "M", "6", "2", "B", "s", "f", "i", "7", "0", "V", "b", "u", "z", "Z", "t", "8", "C"];
sData = ReplaceStr(sData, "\n", "");
for (i=0; i<Length(Client_codec_a); i++) {
char1 = Client_codec_b[i];
char2 = Client_codec_a[i];
sData = ReplaceStr(sData, char1, "___");
sData = ReplaceStr(sData, char2, char1);
sData = ReplaceStr(sData, "___", char2);
}
sData = HmsUtf8Decode(HmsBase64Decode(sData));
return sData;
}
Цитата:
Это - таблицы замен символов. Они, по-умолчанию, тупо кодируют текст в Base64 и меняют символы по этим таблицам. Поэтому можно попытатся расшифровать ссылку или текст следующим скриптом (С++ script)
Вот сам скрипт:
Код: // -----------------------------------------------------------------------------
char DecodeUppodText(char sData) {
variant char1, char2; int i;
variant Client_codec_a = ["D", "4", "l", "N", "o", "1", "I", "g", "T", "a", "X", "H", "Q", "w", "d", "k", "J", "5", "c", "L", "G", "x", "9", "Y", "e", "="];
variant Client_codec_b = ["3", "m", "p", "v", "W", "R", "n", "U", "y", "M", "6", "2", "B", "s", "f", "i", "7", "0", "V", "b", "u", "z", "Z", "t", "8", "C"];
sData = ReplaceStr(sData, "\n", "");
for (i=0; i<Length(Client_codec_a); i++) {
char1 = Client_codec_b[i];
char2 = Client_codec_a[i];
sData = ReplaceStr(sData, char1, "___");
sData = ReplaceStr(sData, char2, char1);
sData = ReplaceStr(sData, "___", char2);
}
sData = HmsUtf8Decode(HmsBase64Decode(sData));
return sData;
}
BennyBlanco
Википедия предлагает пяток онлайн кодировшиков-декодировщиков и пару утилит.
http://www.4mhz.de/b64dec.html
http://www.fourmilab.ch/webtools/base64/
Википедия предлагает пяток онлайн кодировшиков-декодировщиков и пару утилит.
http://www.4mhz.de/b64dec.html
http://www.fourmilab.ch/webtools/base64/
V0lt
Кодировать и раскодировать Base64 мне удобно например этим онлайн сервисом http://base64-encoder-online.waraxe.us/
Проблема в том что закодированный текст что я дал, зашифрован в Base64 и потом полученные символы Base64 заменены символами согласно этой таблице:
Код:
variant Client_codec_a = ["D", "4", "l", "N", "o", "1", "I", "g", "T", "a", "X", "H", "Q", "w", "d", "k", "J", "5", "c", "L", "G", "x", "9", "Y", "e", "="];
variant Client_codec_b = ["3", "m", "p", "v", "W", "R", "n", "U", "y", "M", "6", "2", "B", "s", "f", "i", "7", "0", "V", "b", "u", "z", "Z", "t", "8", "C"];
Кодировать и раскодировать Base64 мне удобно например этим онлайн сервисом http://base64-encoder-online.waraxe.us/
Проблема в том что закодированный текст что я дал, зашифрован в Base64 и потом полученные символы Base64 заменены символами согласно этой таблице:
Код:
variant Client_codec_a = ["D", "4", "l", "N", "o", "1", "I", "g", "T", "a", "X", "H", "Q", "w", "d", "k", "J", "5", "c", "L", "G", "x", "9", "Y", "e", "="];
variant Client_codec_b = ["3", "m", "p", "v", "W", "R", "n", "U", "y", "M", "6", "2", "B", "s", "f", "i", "7", "0", "V", "b", "u", "z", "Z", "t", "8", "C"];
На C это будет выглядеть примерно так:
#include <windows.h>
#pragma comment(lib, "Crypt32.lib")
char encoded[] = "M215V3WNbDc4VxnGtHhlL4EYtH1GO3hGLo7DtoviL4zGOuhzO2FD9S0jLH5Nf4"
"ppfTZW14ZEvgFzf2UHg6lGacEsaEZ9auf1bxExvjisO3BmvjtNvjU0ayUGL6A5";
char Client_codec_a[] = "D4lNo1IgTaXHQwdkJ5cLGx9Ye=";
char Client_codec_b[] = "3mpvWRnUyM62Bsfi70VbuzZt8C";
main()
{
int i, j, buflen;
char buf[512];
for(i = 0; encoded[i]; ++i)
for(j = 0; Client_codec_a[j]; ++j)
if(encoded[i] == Client_codec_a[j])
{
encoded[i] = Client_codec_b[j];
break;
}
else if(encoded[i] == Client_codec_b[j])
{
encoded[i] = Client_codec_a[j];
break;
}
buflen = sizeof(buf);
CryptStringToBinary(encoded, i, CRYPT_STRING_BASE64, buf, &buflen, NULL, NULL);
buf[buflen] = 0;
puts(buf);
}
И после сборки и выполнения получим:
http://ufs2.china-cdn88nmbwacdnln8hq8qwe.com/view/hFoD5Aqtx6Qzn1Q00OY0gQ/1369084866/68918.mp4
#include <windows.h>
#pragma comment(lib, "Crypt32.lib")
char encoded[] = "M215V3WNbDc4VxnGtHhlL4EYtH1GO3hGLo7DtoviL4zGOuhzO2FD9S0jLH5Nf4"
"ppfTZW14ZEvgFzf2UHg6lGacEsaEZ9auf1bxExvjisO3BmvjtNvjU0ayUGL6A5";
char Client_codec_a[] = "D4lNo1IgTaXHQwdkJ5cLGx9Ye=";
char Client_codec_b[] = "3mpvWRnUyM62Bsfi70VbuzZt8C";
main()
{
int i, j, buflen;
char buf[512];
for(i = 0; encoded[i]; ++i)
for(j = 0; Client_codec_a[j]; ++j)
if(encoded[i] == Client_codec_a[j])
{
encoded[i] = Client_codec_b[j];
break;
}
else if(encoded[i] == Client_codec_b[j])
{
encoded[i] = Client_codec_a[j];
break;
}
buflen = sizeof(buf);
CryptStringToBinary(encoded, i, CRYPT_STRING_BASE64, buf, &buflen, NULL, NULL);
buf[buflen] = 0;
puts(buf);
}
И после сборки и выполнения получим:
http://ufs2.china-cdn88nmbwacdnln8hq8qwe.com/view/hFoD5Aqtx6Qzn1Q00OY0gQ/1369084866/68918.mp4
ne_viens
Благодарю
А какой программой можно выполнять такие скрипты самому?
Благодарю
А какой программой можно выполнять такие скрипты самому?
Здравствуйте!
Хочу научиться программировать на C++ под Linux с использованием компилятора gcc. Ни с C++ ни с объектно-ориентированным программированием не знакома. Что бы вы могли порекомендовать для начала, для ускоренного изучения, какую литературу?
И такой вопрос: если в Windows программисты используют функции библиотек user32.dll, system32.dll, то какие библиотеки используются в Linux?
Хочу научиться программировать на C++ под Linux с использованием компилятора gcc. Ни с C++ ни с объектно-ориентированным программированием не знакома. Что бы вы могли порекомендовать для начала, для ускоренного изучения, какую литературу?
И такой вопрос: если в Windows программисты используют функции библиотек user32.dll, system32.dll, то какие библиотеки используются в Linux?
Ребят такая штука есть class Geometry у него есть потомки class Cilinder (Ciobj- его экземпляр) и class Paralle(Paobj - его экземаляр), и от него создан vector <Geometry> Geo;(аКа динамический массив)
вот как его заполняю:
Ciobj.getdata(); //ввели цилиндр
Geo.push_back(Ciobj);// запихали в наш контейнер
cout<<"Цилиндр добавлен"<<endl;
//Paralle - аналогично
теперь вывод:
Geo[i].display(); //он же тут выводит свою функцию которая в нем виртуальная несмотря на то что она переопределена в дочерних(тоже вирт. функции) и по идее он должен выводить метод display() той фигуры чей тип находится на месте "i" и так пробовал и так, даже через указатели(итераторы) не могу понять как вывести..(т.е. у Cilinder и Paralle есть свои методы вывода)
и так пробовал cout подчеркивает ни как не хочет выводить:
vector<Geometry>::iterator cur;
for (cur=Geo.begin();cur<Geo.end();cur++)
cout<<*cur<<endl;
вопрос в том как сделать вывод???
вот как его заполняю:
Ciobj.getdata(); //ввели цилиндр
Geo.push_back(Ciobj);// запихали в наш контейнер
cout<<"Цилиндр добавлен"<<endl;
//Paralle - аналогично
теперь вывод:
Geo[i].display(); //он же тут выводит свою функцию которая в нем виртуальная несмотря на то что она переопределена в дочерних(тоже вирт. функции) и по идее он должен выводить метод display() той фигуры чей тип находится на месте "i" и так пробовал и так, даже через указатели(итераторы) не могу понять как вывести..(т.е. у Cilinder и Paralle есть свои методы вывода)
и так пробовал cout подчеркивает ни как не хочет выводить:
vector<Geometry>::iterator cur;
for (cur=Geo.begin();cur<Geo.end();cur++)
cout<<*cur<<endl;
вопрос в том как сделать вывод???
1234567890qwe
Функция display в Geometry должна быть виртуальной, насколько я понял у тебя так и есть и это правильно.
НО в векторе ты хранишь экземпляры объектов типа Geometry. Именно сами объекты. Те на момент вызова display твоя программа уверена что работает именно с типом Display. Более того, когда ты делаешь push_back у тебя отсекается ненужная часть объекта (которая есть в Parallel, но которой нету в Geometry)
Так вот, а для того, что бы заработал полиморфизм - тебе надо обращаться к объектам либо по указателям, либо по ссылкам. И хранить так же в векторе!
Т.е. Делаешь vector<Geometry *> v;
Потом типа v.push_back(&Clobj)
Теперь можно писать v[0]->display()
И тут уже можно будет сходить в таблицу виртуальных функций и дернуть именно то, что хотелось.
Функция display в Geometry должна быть виртуальной, насколько я понял у тебя так и есть и это правильно.
НО в векторе ты хранишь экземпляры объектов типа Geometry. Именно сами объекты. Те на момент вызова display твоя программа уверена что работает именно с типом Display. Более того, когда ты делаешь push_back у тебя отсекается ненужная часть объекта (которая есть в Parallel, но которой нету в Geometry)
Так вот, а для того, что бы заработал полиморфизм - тебе надо обращаться к объектам либо по указателям, либо по ссылкам. И хранить так же в векторе!
Т.е. Делаешь vector<Geometry *> v;
Потом типа v.push_back(&Clobj)
Теперь можно писать v[0]->display()
И тут уже можно будет сходить в таблицу виртуальных функций и дернуть именно то, что хотелось.
>BennyBlanco C не скриптовый язык программирования. Программа компилируется с cl.exe или gcc.exe в исполняемый exe файл, который запускается и выдаёт результат вычисления.
dragon010
Цитата:
Мэн, ты гений!... я ваще мучался, в книге в разделе STL ваще такого не нашел ничего, все облазил...
Цитата:
Теперь можно писать v[0]->display()
Мэн, ты гений!... я ваще мучался, в книге в разделе STL ваще такого не нашел ничего, все облазил...
1234567890qwe
Клевые книжки по С++ это конечно же Страуструп (если осилить, правда почувствуешь свою крутость)
И Саттер "Решение сложных задач на С++"
Причем последняя написана в духе разбора задачек и ее реально интересно читать
Так, что-то не пойму, оператор int может использоваться и для офисания функции, и для описания переменной.
А функция main это тоже самое, что и програмный сегмент в ассемблере? Ну при выполнении программы в один сегмент загружается сама программа, в другой системные библиотеки и благодаря файлу заголовков адреса библиотечных функций всегда известны.
А функция main это тоже самое, что и програмный сегмент в ассемблере? Ну при выполнении программы в один сегмент загружается сама программа, в другой системные библиотеки и благодаря файлу заголовков адреса библиотечных функций всегда известны.
Да, только int не оператор а тип данных.
Функция main() это место в коде, от которого начинается исполнение кода пользователя (можно ещё и код инициализации написать, который исполняется перед main()).
Очевидно, сегменты в C и в 16бит ассемблере имеют разные значения. Main() можно засунуть в другой сегмент кроме .text с:
#pragma code_seg(".mySeg")
main()
{
}
Функция main() это место в коде, от которого начинается исполнение кода пользователя (можно ещё и код инициализации написать, который исполняется перед main()).
Очевидно, сегменты в C и в 16бит ассемблере имеют разные значения. Main() можно засунуть в другой сегмент кроме .text с:
#pragma code_seg(".mySeg")
main()
{
}
Сорри что не в тему, не знал куда написать.
Нужна программа, конвертировать с XML формата в DBF а именно:
С файла http://rghost.ru/46172440
Вот что должно получится http://rghost.ru/46172230
===================
Файл для тестирования http://rghost.ru/46172293 XML
Нужна программа, конвертировать с XML формата в DBF а именно:
С файла http://rghost.ru/46172440
Вот что должно получится http://rghost.ru/46172230
===================
Файл для тестирования http://rghost.ru/46172293 XML
Цитата:
Очевидно, сегменты в C и в 16бит ассемблере имеют разные значения. Main() можно засунуть в другой сегмент кроме .text
Да, я неправильно написал. Сегменты были в 16-битном ассемблере, а в 32 и 64 битном они стали называться секциями. Программа имеет по меньшей мере две секции: .data - секция кода и .idata - секция импорта. При выполнении программы в секцию импорта загружаются системные dll, при компиляции имена функций преобразуются в их адреса и, таким образом, можно обращаться к функциям API.
Цитата:
Функция main() это место в коде, от которого начинается исполнение кода пользователя (можно ещё и код инициализации написать, который исполняется перед main()).
Ну это я пытаюсь аналогии с ассемблером провести. Поправьте меня, если я что-то путаю.
Код: #include <iostream>
#include <cmath>
Код в .text находится, и программа может иметь только одну секцию- .text, используя только штатные средства C компилятора. MSVC не выделяет отдельную секцию для данных импорта (IAT + IT) внешних библиотек, а линкует их в .rdata. Внешние библиотеки загружаются не в секцию импорта а в адресное пространство данной программы. Загрузчик сканирует таблицу импорта, загружает там описанные библиотеки, находит адреса там-же описанных функций и записывает эти адреса в перxодники (IAT) программы.
Секция импорта не программируется, а в таблицу импортов добавляются внешние библиотеки и их функции по мере надобности. Например, написали в коде MessageBox(); , компилятор находит в <windows.h>, что эта ф-я __stdcall с 4 аргументами, и обзывает ее как _imp__MessageBoxA@16, а дальше уже линкер находит такую ф-ю в user32.lib и добавляет эту информацию в таблицу импорта.
Для указания адреса исползуется & а не int (например, &variable). B ассемблере int называется dword, short - word, char - byte. А в описаниях ф-ий применяется для спецификации возвращаемого значения и типа аргументов. (например, int MyFunc(int i, char* c); указывает, что MyFunc() получает int i и адрес байта(ов) c, а возвращает int). Аналогия байта на C- char, и нет смысла сокращать счётчики до char-ов, так как операции с данными не кратными 32 битам на 32 битном процессоре выполняются гораздо медленнее. Линкер при оптимизации их всёравно к int приводит.
Очевидно, что, пройдя цикл, pi просто принимает такое круглое значение.
Секция импорта не программируется, а в таблицу импортов добавляются внешние библиотеки и их функции по мере надобности. Например, написали в коде MessageBox(); , компилятор находит в <windows.h>, что эта ф-я __stdcall с 4 аргументами, и обзывает ее как _imp__MessageBoxA@16, а дальше уже линкер находит такую ф-ю в user32.lib и добавляет эту информацию в таблицу импорта.
Для указания адреса исползуется & а не int (например, &variable). B ассемблере int называется dword, short - word, char - byte. А в описаниях ф-ий применяется для спецификации возвращаемого значения и типа аргументов. (например, int MyFunc(int i, char* c); указывает, что MyFunc() получает int i и адрес байта(ов) c, а возвращает int). Аналогия байта на C- char, и нет смысла сокращать счётчики до char-ов, так как операции с данными не кратными 32 битам на 32 битном процессоре выполняются гораздо медленнее. Линкер при оптимизации их всёравно к int приводит.
Очевидно, что, пройдя цикл, pi просто принимает такое круглое значение.
sunny1983
Цитата:
Потому что в выражениях вроде 4/(i*4+1) используются только целочисленные переменные и константы и, соответственно, вычисляются они по целочисленной арифметике. Приведение к типу float осуществляется уже позже, когда в вычислениях принимает участие pi.
Цитата:
Почему выводится 3 - только целая часть?
Потому что в выражениях вроде 4/(i*4+1) используются только целочисленные переменные и константы и, соответственно, вычисляются они по целочисленной арифметике. Приведение к типу float осуществляется уже позже, когда в вычислениях принимает участие pi.
"/" означает не целочисленное деление, а просто деление? Почему тогда результат целочисленный? Как должно быть записано выражение, чтобы результат деления был float?
ne_viens, спасибо за поправку
Правда я использую не MSVC, а gcc и вообще под Linux программирую, просто я сделал предположение что unix-программа ELF-формата также как и windows-программа PE-формата состоит из секций.
glibc это такой же API, как и WIN32, но для Linux, так или я в чём-то заблуждаюсь? Библиотеки имеют расширение не dll, а so.
Вот что пока не понял, чтобы использовать функцию какой-либо сторонней библиотеки кроме самой библиотеки .so программист обязательно должен иметь файл .h?
ne_viens, спасибо за поправку
Правда я использую не MSVC, а gcc и вообще под Linux программирую, просто я сделал предположение что unix-программа ELF-формата также как и windows-программа PE-формата состоит из секций.
glibc это такой же API, как и WIN32, но для Linux, так или я в чём-то заблуждаюсь? Библиотеки имеют расширение не dll, а so.
Вот что пока не понял, чтобы использовать функцию какой-либо сторонней библиотеки кроме самой библиотеки .so программист обязательно должен иметь файл .h?
sunny1983
Цитата:
Тип результата зависит от типов операндов. Вот как это расписано в Стандарте C++:
Цитата:
В данном случае, чтобы перейти к вычислениям с плавающей точкой, проще всего написать как-нибудь вроде "4/(i*4.0+1)".
Цитата:
"/" означает не целочисленное деление, а просто деление? Почему тогда результат целочисленный? Как должно быть записано выражение, чтобы результат деления был float?
Тип результата зависит от типов операндов. Вот как это расписано в Стандарте C++:
Цитата:
Many binary operators that expect operands of arithmetic or enumeration type cause conversions and yield result types in a similar way. The purpose is to yield a common type, which is also the type of the result.
This pattern is called the usual arithmetic conversions, which are defined as follows:
— If either operand is of type long double, the other shall be converted to long double.
— Otherwise, if either operand is double, the other shall be converted to double.
— Otherwise, if either operand is float, the other shall be converted to float.
— Otherwise, the integral promotions (4.5) shall be performed on both operands.
— Then, if either operand is unsigned long the other shall be converted to unsigned long.
— Otherwise, if one operand is a long int and the other unsigned int, then if a long int can represent all the values of an unsigned int, the unsigned int shall be converted to a long int; otherwise both operands shall be converted to unsigned long int.
— Otherwise, if either operand is long, the other shall be converted to long.
— Otherwise, if either operand is unsigned, the other shall be converted to unsigned.
[Note: otherwise, the only remaining case is that both operands are int ]
В данном случае, чтобы перейти к вычислениям с плавающей точкой, проще всего написать как-нибудь вроде "4/(i*4.0+1)".
>sunny1983Напиши float i;
Про Linux не знаю, не разбирался.
Если ф-я __cdecl, h. файл с прототипами не нужен. Но лучше всётаки прототип написать- это предотвратит трудно устранимые ошибки.
Про Linux не знаю, не разбирался.
Если ф-я __cdecl, h. файл с прототипами не нужен. Но лучше всётаки прототип написать- это предотвратит трудно устранимые ошибки.
Долго искал куда вопрос кинуть, решил сюда.. так как дело имею именно с С/С++
Воощем хотелось бы узнать побольше о сборке, линковке, как выглядят объектные файлы, как линковщик вместо функций адреса вставляет, как параметры функций в стек кладутся, как выглядит массив и где храниться информация о нем в памяти, даже не знаю как выразиться типо как уже физически-архитектурно работа происходит... может есть документации какие нибудь или статьи, сайты хорошие, книги.. может кто сталкивался (предпочтительнее на русском)...
спасибо...
Воощем хотелось бы узнать побольше о сборке, линковке, как выглядят объектные файлы, как линковщик вместо функций адреса вставляет, как параметры функций в стек кладутся, как выглядит массив и где храниться информация о нем в памяти, даже не знаю как выразиться типо как уже физически-архитектурно работа происходит... может есть документации какие нибудь или статьи, сайты хорошие, книги.. может кто сталкивался (предпочтительнее на русском)...
спасибо...
Дайте какие-нибудь задачки для начинающего программиста порешать, чтобы быстро освоиться.
Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193
Предыдущая тема: не знаю как назвать тему :-)
Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.