Если это ваш первый визит, рекомендуем почитать справку по форуму. Для размещения своих сообщений необходимо зарегистрироваться. Для просмотра сообщений выберите раздел. |
программка с++ |
Философия, технологии, алгоритмы! |
|
Опции темы |
03.01.2013, 13:48 | #1 |
mpv
Сообщений: 1,486
Регистрация: 18.12.2006
Не в сети |
программка с++
Здравствуйте уважаемые!
Есть задача следующего плана: нужна программулька на с++, которая заданную информацию(текст и цифры) кодировал и выводил код ASCII в 16-тичной системе. Мои познания с данным языком, близки к нулю(мне ближе делфи и паскаль), но все же нашел функции которые переводят один символ в код ASCII, но почему то на русские символы это не распространяется. Вот мне бы кто-нибудь помог бы с кодом... Ну а как полученый код ASCII перевести в 16-ю систему, это я думаю, додумаюсь. |
03.01.2013, 14:40 | #2 |
Форумец
Сообщений: 39,958
Регистрация: 27.05.2003
Возраст: 46
Не в сети |
в коде надо заменить все типы char на unsigned char, поможет, я гарантирую это (с)
как помочь с кодом, не совсем понятно. если в массив unsigned char szText[1024]; загрузить текстовый файл, то к элементам массива можно обращаться как к числам (szText[0] - код первого символа) |
03.01.2013, 15:52 | #3 |
highly mean
Сообщений: 1,128
Регистрация: 26.05.2011
Возраст: 35
Не в сети |
|
03.01.2013, 16:00 | #4 |
mpv
Сообщений: 1,486
Регистрация: 18.12.2006
Не в сети |
silly, кода не было, потому что его по сути ещё и нет! я задачу на несколько частей разбил, и пытаюсь блоками сначала написать, а потом как-то собрать воедино.
Я конечно понимаю, что данная задача пустяковая, и то что любой программист напишет код не задумываясь за 15-20 минут, но я данного языка не знаю. и как говорится, гляжу в книгу, а вижу фигу.... а время поджимает потихоньку |
03.01.2013, 16:28 | #5 |
Форумец
Сообщений: 39,958
Регистрация: 27.05.2003
Возраст: 46
Не в сети |
вот на вид рабочий пример - как работать на сях с файлом
#include <stdio.h> #include <stdlib.h> int main(void) { FILE *fp; float bal[5] = { 1.1F, 2.2F, 3.3F, 4.4F, 5.5F }; int i; /* запись значений */ if((fp=fopen("test", "wb"))==NULL) { printf("Не удаётся отрыть файл.\n"); exit(1); } if(fwrite(bal, sizeof(float), 5, fp) != 5) printf("Ошибка при записи файла."); fclose(fp); /* чтение значений */ if((fp=fopen("test", "rb"))==NULL) { printf("Не удаётся отрыть файл.\n"); exit(1); } if(fread(bal, sizeof(float), 5, fp) != 5) { if(feof(fp)) printf("Преждевременное достижение конца файла."); else printf("Ошибка при чтении файла."); } fclose(fp); for(i=0; i<5; i++) printf("%f ", bal[i]); return 0; } так можно узнать размер открытого файла length=filelength(fileno(fp)); вместо float только надо работать с unsigned char вот так мы выведем шестнадатиричные коды for(i=0; i<length; i++) printf("%02X ", bal[i]); |
04.01.2013, 17:55 | #8 | |
Registered User
Сообщений: 1,114
Регистрация: 23.06.2007
Возраст: 56
Не в сети |
Цитата:
Код:
#include <iostream> #include <string> #include <locale.h> using namespace std; int main() { setlocale(LC_ALL,"Russian"); string s ("Привет, Мир! 12345"); cout << "Исходная строка"<<endl<<s<<endl; cout << "Конвертированная строка"<<endl; cout <<hex; for (size_t i=0; i<s.length(); i++) { cout<<(unsigned short)s[i]<<" "; } cout <<endl; system("pause"); return 0; } Код:
Исходная строка Привет, Мир! 12345 Конвертированная строка ffcf fff0 ffe8 ffe2 ffe5 fff2 2c 20 ffcc ffe8 fff0 21 20 31 32 33 34 35 |
|
04.01.2013, 18:13 | #9 |
highly mean
Сообщений: 1,128
Регистрация: 26.05.2011
Возраст: 35
Не в сети |
Код:
Исходная строка Привет, Мир! 12345 Конвертированная строка ffcf fff0 ffe8 ffe2 ffe5 fff2 2c 20 ffcc ffe8 fff0 21 20 31 32 33 34 35 С юникодом вы ТС окончательно запутаете. А, понял. Это у нас cp1251 c лишними FF. |
04.01.2013, 18:34 | #10 |
Registered User
Сообщений: 1,114
Регистрация: 23.06.2007
Возраст: 56
Не в сети |
|
11.01.2013, 20:55 | #13 |
mpv
Сообщений: 1,486
Регистрация: 18.12.2006
Не в сети |
using System;
using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; namespace WindowsFormsApplication2 { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { byte[] textBytes = Encoding.ASCII.GetBytes(textBox1.Text); foreach (byte b in textBytes) textBox2.Text += Convert.ToString(b,16) + "."; } } } предыдущее сообщение не в тему |
11.01.2013, 21:31 | #14 |
Форумец
Сообщений: 39,958
Регистрация: 27.05.2003
Возраст: 46
Не в сети |
я понял в чем проблема. в этой гадости (это не С++, это C#) устанавливается как то кодировка по умолчанию, возился как-то давным давно, тоже сталкивался с подобными проблемами.
Экземпляр http://msdn.microsoft.com/en-us/libr....encoding.aspx вот этого класса, сконструированный с русской кодировкой, нужно куда то по умолчанию прикрутить. вот так я читал файлы кажись StreamReader sr = new StreamReader("C:\\text.txt",false,System.Text.Enco ding.GetEncoding(1251)); |
11.01.2013, 22:55 | #18 |
Форумец
Сообщений: 39,958
Регистрация: 27.05.2003
Возраст: 46
Не в сети |
|
11.01.2013, 23:07 | #20 |
Форумец
Сообщений: 331
Регистрация: 24.12.2005
Не в сети |
ATI, ты в какой IDE собираешь проект? Если у тебя стоит Visual Studio (как я понимаю стоит, раз шарпом пользуешься), то создай пустой проект с++ и все должно собраться. По поводу переменных не понял. ты опиши что именно тебе нужно, какая постановка задачи? Ввести текст или цифры в консоль, а программа должна выдать шестнадцатиричное представление для каждого введенного символа? Или что?
|
11.01.2013, 23:12 | #21 |
mpv
Сообщений: 1,486
Регистрация: 18.12.2006
Не в сети |
#include <iostream>
#include <string> #include <locale.h> using namespace std; int main() { char s; setlocale(LC_ALL,"Russian"); cout<<"введите исходный текст"<<endl; cin>>s string s ; cout << "преобразованный текст"<<endl; cout <<hex; for (size_t i=0; i<s.length(s); i++) { cout<<(unsigned short)s[i]<<" "; } cout <<endl; system("pause"); return 0; } не работает((((( поправте дурака, курсяк через неделю, а так получилось что тему узнал буквально недавно, не понимаю что от меня хотят вообще, так и плюс ко всему программа эта нужна на с++, а я сталкивался только с BASIK и Pascal. прочитал руководство для начинающих с++ Шилдта, но как-то мне это не много дало, только начинаю понимать немного что есть что в коде, но какие пишу, не работают |
11.01.2013, 23:16 | #22 |
mpv
Сообщений: 1,486
Регистрация: 18.12.2006
Не в сети |
Godric, задача состоит в том, что мне нужна "простая" программа перевода заданного текста в 16-тиричный код ASCII, к которой мне надо будет написать нечто, типа паспорта, т.е. расписать её задачи, как работает, внешнее и внутреннее описание программной среды и т.д.
|
11.01.2013, 23:37 | #23 |
Форумец
Сообщений: 331
Регистрация: 24.12.2005
Не в сети |
ATI,
#include <iostream> #include <string> #include <stdio.h> int main() { std::setlocale( LC_ALL, "Russian" ); std::cout << "Enter text:" << std::endl; std::string input_string; std::cin >> input_string; std::cout << "Result:" << std::endl; for (size_t i = 0; i < input_string.length(); ++i) { printf("%x ", (unsigned char)input_string[i]); } std::cout << std::endl; return 0; } самый простой вариант. Можно еще не использовать printf, так как это все таки С а не С++ |
11.01.2013, 23:44 | #24 |
mpv
Сообщений: 1,486
Регистрация: 18.12.2006
Не в сети |
Godric, спасибо!!!! работает с английским. теперь попытаюсь разобраться куда засунуть в Visual Studio что бы получить форму уже, а так через DEV-c++ открылось всё и заработало в консольном виде с английским, с русским не проверял по таблице ASCII
|
11.01.2013, 23:55 | #25 |
Форумец
Сообщений: 331
Регистрация: 24.12.2005
Не в сети |
ATI, и русский должен работать. Вот еще вариант, получше будет.
#include <iostream> #include <string> #include <stdio.h> int main() { std::setlocale( LC_ALL, "Russian" ); std::cout << "Enter text:" << std::endl; std::string input_string; getline(std::cin, input_string); std::cout << "Result:" << std::endl; for (size_t i = 0; i < input_string.length(); ++i) { uint32_t ch = input_string[i]; ch &= 0xFF; std::cout << std::hex << ch << " "; } std::cout << std::endl; return 0; } Разбирайся, удачи, стране нужны специалисты ))))))) |
12.01.2013, 00:07 | #27 |
Форумец
Сообщений: 331
Регистрация: 24.12.2005
Не в сети |
ATI, студии под рукой нет, но теоретически у тебя на форме будет текстовое поле для ввода текста, кнопка и лейбл для вывода результата. После ввода текста пользователь нажмет на кнопку, получаешь текст из текстового поля в строку, например: std::string input_text. далее вызывай функцию:
std::string input_string_to_hex(const std::string& input_string) { std::stringstream result; for (size_t i = 0; i < input_string.length(); ++i) { uint32_t ch = input_string[i]; ch &= 0xFF; result << std::hex << ch << " "; } return result.str(); } вызываешь соответсвенно вот так: std::string result = input_string_to_hex(input_string); все, далее выводи result в Label и все. Дальше дело красоты и удобства для пользователя |