Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » C/C++ - Перекодировка из шестнадцатеричной в десятеричную систему

Ответить
Настройки темы
C/C++ - Перекодировка из шестнадцатеричной в десятеричную систему

Новый участник


Сообщения: 9
Благодарности: 0

Профиль | Отправить 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

 

ИО Капитана Очевидности


Contributor


Сообщения: 5387
Благодарности: 1105

Профиль | Отправить PM | Цитировать


Цитата Alexey271:
Мне не хочется писать свою перекодирующую функцию, поэтому хотел бы узнать, есть ли более простой способ перекодирования шестнадцатеричного числа в десятеричное. »
Цитата Alexey271:
IntToHex() не сработал! »
Вообще-то перекодировка ИЗ шестнадцатеричной в десятичную называется HexToInt

-------
Самое совершенное оружие, которым забиты арсеналы богатых и процветающих наций, может легко уничтожить необразованного, больного, бедного и голодного. Но оно не может уничтожить невежество, болезнь, нищету и голод. (Фидель Кастро)

Почему всех осужденных за измену Родине при Сталине реабилитировали при Горбачёве по отсутствию состава преступления? Потому что при Горбачёве измену Родине перестали считать преступлением.


Отправлено: 18:06, 23-04-2011 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Новый участник


Сообщения: 9
Благодарности: 0

Профиль | Отправить PM | Цитировать


Цитата El Scorpio:
Вообще-то перекодировка ИЗ шестнадцатеричной в десятичную называется HexToInt »
El Scorpio
Спасибо, конечно! Но не срабатывает у меня "HEX" почему-то!
Скинь исходники, где у тебя работает **ToHex() или HexTo***()!

Отправлено: 18:43, 24-04-2011 | #3


ИО Капитана Очевидности


Contributor


Сообщения: 5387
Благодарности: 1105

Профиль | Отправить PM | Цитировать


Alexey271, увы, давно ничего не кодил
Возможно, там нужно передать строку определённой длины?

-------
Самое совершенное оружие, которым забиты арсеналы богатых и процветающих наций, может легко уничтожить необразованного, больного, бедного и голодного. Но оно не может уничтожить невежество, болезнь, нищету и голод. (Фидель Кастро)

Почему всех осужденных за измену Родине при Сталине реабилитировали при Горбачёве по отсутствию состава преступления? Потому что при Горбачёве измену Родине перестали считать преступлением.


Отправлено: 01:51, 25-04-2011 | #4


Новый участник


Сообщения: 9
Благодарности: 0

Профиль | Отправить PM | Цитировать


Цитата El Scorpio:
Alexey271, увы, давно ничего не кодил
Возможно, там нужно передать строку определённой длины? »
El Scorpio
Я имел ввиду обычных 2 Edit и Button, где будет перекодировка из 16-ричной в 10-ричную!
Сам не пойму в чем дело, то ли в типах данных, то ли в длине, как ты сказал!

Отправлено: 03:02, 25-04-2011 | #5


Новый участник


Сообщения: 9
Благодарности: 0

Профиль | Отправить PM | Цитировать


Вложения
Тип файла: rar 16-ти ричная в 10-ти ричную.rar
(596.1 Kb, 4 просмотров)

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
P.S.
IntToHex() - Работает
HexToInt() - не определена (не работает)

Последний раз редактировалось Alexey271, 25-04-2011 в 09:56. Причина: добавление


Отправлено: 09:54, 25-04-2011 | #6



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » C/C++ - Перекодировка из шестнадцатеричной в десятеричную систему

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Разное - перекодировка 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




 
Переход