|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » C/C++ - Перекодировка из шестнадцатеричной в десятеричную систему |
|
C/C++ - Перекодировка из шестнадцатеричной в десятеричную систему
|
Новый участник Сообщения: 9 |
Профиль | Отправить PM | Цитировать Здравствуйте!
Стоит задача чтения потока с терминала через com-порт и преобразования (математическое) их! При чтении потоков с com-порта сигнал приходит в шестнадцатеричной системе. Мне не хочется писать свою перекодирующую функцию, поэтому хотел бы узнать, есть ли более простой способ перекодирования шестнадцатеричного числа в десятеричное. Структура посылки: 1 байт: знак "+" или "-" 2 - 9 байт: число 10 байт: символ "S" 11-18 байт: число 19-20 байт: № посылки Пример полученных посылок +00000000S00000000І± +00000000S00000000ІІ +00000000S00000000І3 +00000000S00000000Іґ +00000000S00000000І5 +00000000S00000000І6 +00000000S00000000І· +00000000S00000000Іё +00000000S00000000І9 +00000000S0000000030 +00000000S000000003± +00000000S000000003І +00000000S0000000033 +00000000S000000003ґ +00000000S0000000035 +00000000S0000000036 +00000000S000000003· +00000000S000000003ё +00000000S0000000039 +00000000S00000000ґ0 +00000000S00000000ґ± +00000000S00000000ґІ +00000000S00000000ґ3 +00000000S00000000ґґ +00000000S00000000ґ5 1.P.S. IntToHex() не сработал! 2.P.S. Извиняюсь за свою неграмотность в программирование на С\C++, поэтому прошу при ответе написать подключаемую библиотеку и функцию перекодировки! Спасибо! |
|
Отправлено: 20:08, 22-04-2011 |
ИО Капитана Очевидности Сообщения: 5387
|
Профиль | Отправить PM | Цитировать Цитата Alexey271:
Цитата Alexey271:
|
||
------- Отправлено: 18:06, 23-04-2011 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Новый участник Сообщения: 9
|
Профиль | Отправить PM | Цитировать Цитата El Scorpio:
Спасибо, конечно! Но не срабатывает у меня "HEX" почему-то! Скинь исходники, где у тебя работает **ToHex() или HexTo***()! |
|
Отправлено: 18:43, 24-04-2011 | #3 |
ИО Капитана Очевидности Сообщения: 5387
|
Профиль | Отправить PM | Цитировать Alexey271, увы, давно ничего не кодил
Возможно, там нужно передать строку определённой длины? |
------- Отправлено: 01:51, 25-04-2011 | #4 |
Новый участник Сообщения: 9
|
Профиль | Отправить PM | Цитировать Цитата El Scorpio:
Я имел ввиду обычных 2 Edit и Button, где будет перекодировка из 16-ричной в 10-ричную! Сам не пойму в чем дело, то ли в типах данных, то ли в длине, как ты сказал! |
||
Отправлено: 03:02, 25-04-2011 | #5 |
Новый участник Сообщения: 9
|
Профиль | Отправить PM | Цитировать El Scorpio
Решил задачу в "лоб", как говориться! Есть идейки, как упростить или улучшить код?! //#################################// /* ПЕРЕВОД ИЗ 16 В 10 */ //#################################// Simbol2[0] = 0; Simbol2[1] = 1; Simbol2[2] = 2; Simbol2[3] = 3; Simbol2[4] = 4; Simbol2[5] = 5; Simbol2[6] = 6; Simbol2[7] = 7; Simbol2[8] = 8; Simbol2[9] = 9; Simbol2[10] = "a"; Simbol2[11] = "b"; Simbol2[12] = "c"; Simbol2[13] = "d"; Simbol2[14] = "e"; Simbol2[15] = "f"; Simb2[0] = 0; Simb2[1] = 1; Simb2[2] = 2; Simb2[3] = 3; Simb2[4] = 4; Simb2[5] = 5; Simb2[6] = 6; Simb2[7] = 7; Simb2[8] = 8; Simb2[9] = 9; Simb2[10] = 10; Simb2[11] = 11; Simb2[12] = 12; Simb2[13] = 13; Simb2[14] = 14; Simb2[15] = 15; b2 = LabeledEdit4->Text; j=b2.Length(); //функция возвращает количество символов в строке j=j-1; //отнимаем единицу для перевода в десятиричную систему //Вносим в массив символы строки //Start// for(i=1; i<=j+1; i++) { Simbol[i]=b2.SubString(i,1);// функция выделяет 1 симолов, начиная с i из строки b2 } //End// //Присваиваем массиву числовые значения 16-ти ричной кодировки //Start// for(i=1; i<=j+1;i++) { for(k=0; k<=16;k++) { if(Simbol[i]==Simbol2[k]) { Simb[i] = Simb2[k]; //ShowMessage(Simb2[k]); } } } //End// //Перевод чисел из 16 в 10 //Start// code10 = 0; // на всякий случай обнуляем for(i=1; i<=j+1;i++) { if(i==1) { code10+= Simb[j+1]; } else { //возведение в степень числа 16 int S16 = 0; // на всякий случай обнуляем for(k=1; k<i; k++) { if(k==1){S16+=16;} // else{S16=S16*16;} // } code10+= Simb[j+2-i]*S16; } } //End// LabeledEdit3->Text = code10; // запись полученного значения Edit IntToHex() - Работает HexToInt() - не определена (не работает) |
Последний раз редактировалось Alexey271, 25-04-2011 в 09:56. Причина: добавление Отправлено: 09:54, 25-04-2011 | #6 |
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
Разное - перекодировка | rromaa | Видео и аудио: обработка и кодирование | 3 | 28-08-2009 02:18 | |
Перекодировка текста | PJFry | Хочу все знать | 3 | 20-03-2008 21:21 | |
перекодировка *.cvf | Friend | Хочу все знать | 7 | 03-03-2006 15:10 | |
Перекодировка в Linux | DMuzer | Программное обеспечение Linux и FreeBSD | 7 | 24-06-2003 15:15 |
|