Ru-Board.club
← Вернуться в раздел «Прикладное программирование»

» Delphi: Как сложить hex-числа?

Автор: imonah
Дата сообщения: 08.01.2007 11:21
Возникла необходимость подсчитать чексумму некоторой строки. Алгоритм таков.
Есть к примеру строка вида:
7Ff
Нужно подсчитать чексумму в виде:
hex(7)+hex(F)+hex(f) = ??
Руками все делается просто - смотрим табличку перевода символов ASCII в hex и на виндовском калькуляторе спокойно все считается:
37h+46h+66h=E3h
Как это же проделать на Делфи?
Какой должен быть тип переменной - чексуммы и как его перевести в string?

Заранее спасибо
Автор: sunduk4
Дата сообщения: 08.01.2007 12:02
а в дельфи почему не получается?
i := $1f + $2f
Автор: imonah
Дата сообщения: 08.01.2007 12:10
Может я туплю, но что-то после праздников не доходит
Просто сложить известные числа - получается... чем перевести?
Скажем переменные типа char
a:='7'
b:='F'
c:='f'
Надо получить их hex-значения и их сложить.
Как?
Автор: sunduk4
Дата сообщения: 08.01.2007 12:19
F1 + IntToHex.
Автор: imonah
Дата сообщения: 08.01.2007 12:29
sunduk4
Слушай, умничать мы все умеем, ты покажи как это работает?
Я же наверно не просто так спрашиваю, а потому что с утра уже голову об эти преконвертировки типов сломал...
Автор: sunduk4
Дата сообщения: 08.01.2007 12:39
var a, b, c, d: integer;
a := $7;
b := $F;
c := $F;
d := a + b + c;
ShowMessage('Result: ' + IntToHex(d, 2));

a, b, c - коды символов в int/hex
Автор: imonah
Дата сообщения: 08.01.2007 12:54
Кажется доколебал...

Код: function TForm1.TransRequest(cnumTr,cmdTr,paramTr:string):string;
var CheckSum: string;
a,b,c,d:integer;

begin
a:=Ord(cnumTr[1]);
b:=Ord(cnumTr[2]);
c:=Ord(cmdTr[1]);
d:=a+b+c;
CheckSum:=IntToHex(d,2);
label1.caption:='*'+cnumTr+cmdTr+paramTr+checksum+'#';
Result:='*'+cnumTr+cmdTr+paramTr+checksum+'#';
end;
Автор: sunduk4
Дата сообщения: 08.01.2007 13:04
пробегогаешь по символам строки, получаешь коды символов, они - integer, складываешь.
преобразуешь в hex.
все собственно.
Автор: A_V
Дата сообщения: 08.01.2007 16:42
а не проще что-то типа
StrToInt('$' + a) + StrToInt('$' + b) + StrToInt('$' + C)
Автор: evle
Дата сообщения: 08.01.2007 17:14
imonah
Числа не бывают hex или не hex. Hex — это строковое представление числа, строки складывать не рекомендуется.
Тебе, как я понял, нужно hex-представление суммы всех кодов символов в строке.
В первом приближении это выглядит так:

Код:
var
s: string; // исходная строка
sum: integer; // сумма
r: string; // результат
begin
for i := 1 to length(s) do
inc(sum, ord(s[i]));
r := IntToHex(sum)
Автор: imonah
Дата сообщения: 08.01.2007 17:32
evle
Ну да, приблизительно так и сделано... Проблема была в преобразовании... Когда до меня доперло, что

Цитата:
Числа не бывают hex или не hex. Hex — это строковое представление числа, строки складывать не рекомендуется.


То дальше все решилось.
Спасибо всем, кто поучаствовал

Страницы: 1

Предыдущая тема: Помогите связать программу на Delphi с и-нетом


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.