как это выразить ...
Я весь день изо всех сил пытался обратить значение UID карты NIF Mifare, значение, которое я прочитал в виде шестнадцатеричной строки, которую я могу преобразовать в целое число,это очень хорошо работает с 4-байтовым UID.
Вещи запутываются, когда дело доходит до карты mifare desfire, которая может иметь большой пример UID:
04 44 44 22 E0 62 80
Значение читается правильно ия могу даже преобразовать это в десятичное число, используя мои функции StrToInt ('$' + TheUIDvalue)
теперь странная часть состоит в том, что мне нужно обратить это, используя следующую функцию:
function HexToInt(s: string): Longword;
var
b: byte;
c: Char;
begin
Result := 0;
s := UpperCase(s);
for b := 1 to Length(s) do
begin
Result := Result * 16;
c := s[b];
case c of
'0' .. '9':
Inc(Result, Ord(c) - Ord('0'));
'A' .. 'F':
Inc(Result, Ord(c) - Ord('A') + 10);
else
begin
Result := 0
end;
end;
end;
end;
function LongEndian(L : UInt64) : UInt64;
begin
result := ((L and $000000FF) shl 24) or
((L and $0000FF00) shl 8) or
((L and $00FF0000) shr 8) or
((L and $FF000000) shr 24);
end;
function TfrmMain.HexResponseReversed ( input: string): string;
begin
result := IntToHex(EndianLong(hexToInt(input)));
end;
The result i get is :
80 62 E0 22
04 44 44 22 E0 62 80
Так что здесь что-то серьезно упущено ... прошу прощения за грязный код
Я подозреваю, что что-то не так с функцией IntToHex