Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 07.05.2011, 15:41   #1
AnderoN
Пользователь
 
Регистрация: 05.05.2011
Сообщений: 14
По умолчанию Перевод из шестнадцатеричной системы в десятичную

Всем привет, помогите пожалуйста. У меня с микроконтроллера поступает информация, я записываю ее в массив ab, массив типа byte, информация приходит в шестнадцатеричном формате, мне надо перевести его в десятичный формат, для этого я использую функцию, код которой представлен ниже:


Код:
FUNCTION HEX2DEC(HEX: STRING): LONGINT;

FUNCTION Digt(Ch: CHAR): BYTE;

CONST
HEXDigts: STRING[16] = '0123456789ABCDEF';

VAR
I: BYTE;
N: BYTE;

BEGIN
N := 0;
FOR I := 1 TO Length(HEXDigts) DO
IF Ch = HEXDigts[i] THEN N := I - 1;
Digt := N;
END;

CONST
HEXSet: SET OF CHAR = ['0'..'9', 'A'..'F'];

VAR
J    : LONGINT;
Error: BOOLEAN;
DEC  : LONGINT;

BEGIN
DEC := 0;
Error := False;
FOR J := 1 TO Length(HEX) DO
BEGIN
IF NOT (UpCase(HEX[J]) IN HEXSet) THEN Error := True;
DEC := DEC + Digt(UpCase(HEX[J])) SHL ((Length(HEX) - J) * 4);
{ 16^N = 2^(N * 4) }
{ N SHL ((Length(HEX) - J) * 4) = N * 16^(Length(HEX) - J) }
END;
IF Error THEN HEX2DEC := 0
ELSE HEX2DEC := DEC;
END;
При написании в основном коде программы строчки

Код:
HEX2DEC (ab[i])
мне выдает ошибку, видимо потому что мой массив типа byte, а в функции перевод осуществляется для типа string. Как мне сделать, чтобы все таки мои данные перевелись в десятичную систему счисления? Помогите пожалуйста.

Последний раз редактировалось AnderoN; 07.05.2011 в 15:44.
AnderoN вне форума Ответить с цитированием
Старый 07.05.2011, 16:47   #2
AnderoN
Пользователь
 
Регистрация: 05.05.2011
Сообщений: 14
По умолчанию

Вроде разобрался, но у меня возник другой вопрос. В мой массив ab от микроконтроллера идут значения, мне надо выделять из них каждые 10 пришедших значений складывать их и делить на 10 (находить среднее арифметическое), я для этого сделал цикл

Код:
while bb do (бесконечный цикл)
begin
 for i:=1 to 10 do


end;
В общем я в бесконечный цикл (т.к. заранее не известно сколько значений будет посылать микроконтроллером), пометисл цикл от 1 до 10 ( тоесть должный брать по 10 значений), подскажите как мне теперь сделать чтобы они складывались и делились на 10?
AnderoN вне форума Ответить с цитированием
Старый 07.05.2011, 19:46   #3
eduard93
Форумчанин
 
Регистрация: 06.12.2010
Сообщений: 300
По умолчанию

Просто: получаете новое число, прибавляете его к сумме, если i=10 то делите сумму на 10.
eduard93 вне форума Ответить с цитированием
Старый 07.05.2011, 19:55   #4
_Dmitry
Участник клуба
 
Аватар для _Dmitry
 
Регистрация: 02.09.2007
Сообщений: 1,193
По умолчанию

Стандартная функция Дельфи StrToInt понимает шестнадцатеричные числа.
Пример: INT:=StrToInt('$'+HEX);
_Dmitry вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Перевод числа из шестнадцатеричной(hex) в десятичную(dec) Alex1991 Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 5 15.11.2010 14:57
си++ перевод числа из шестнадцатиричной системы в десятичную. Bonne Помощь студентам 1 18.04.2010 19:19
си++ перевод числа из двоичной системы в десятичную. Bonne Помощь студентам 1 13.04.2010 22:07
Перевод числа из двоичной системы в десятичную С++ kontroller Помощь студентам 2 15.02.2010 20:39