Общие преобразования в Delphi
Автор:lyboy99
электронная почта:[email protected]
URL: http://hnh.126.com
Предоставить вам несколько часто используемых методов преобразования и их функции преобразования.
Надеюсь, это поможет вам
1.HEX -> Целое число
2.2.Декабрь в HEX
3.ASCII в HEX/математика
4. Двоичный формат в десятичный
=============================================== ============
1.HEX -> Целое число
=============================================== ============
Метод.1
-------------------------------------------------- ----------------------------------
вар
я: целое число
с: строка;
начинать
s := '$' + ThatHexString;
я := StrToInt(а);
конец;
-------------------------------------------------- ----------------------------------
Метод.2
-------------------------------------------------- ----------------------------------
CONST HEX: МАССИВ['A'..'F'] ЦЕЛЫХ ЧИСЛЕН = (10,11,12,13,14,15);
ВАР стр : Строка;
Int,
я: целое число;
НАЧИНАТЬ
READLN(стр);
Целое := 0;
FOR i := 1 TO Длина(str) DO
IF str[i] < 'A' THEN Int := Int * 16 + ORD(str[i]) - 48
ELSE Int := Int * 16 + HEX[str[i]];
ЗАПИСЬ(Int);
РЭДЛН;
КОНЕЦ.
=============================================== =
2. Декабрь в HEX
----------------------------------------------
HexString := Format('%0x',DecValue);
----------------------------------------------
=============================================== ==
3.ASCII в HEX/математика
--------------------------
единица Hexstr;
интерфейс
использует String16, SysUtils;
Тип
ПБайт = ^БАЙТ;
PROcedure BytesToHexStr (var hHexStr: String; pbyteArray: PByte; InputLength: Word);
процедура HexStrToBytes (hHexStr: String; pbyteArray: Pointer);
процедура HexBytesToChar (var Response: String; hexbytes: PChar; InputLength: WORD);
выполнение
процедура BytesToHexStr (var hHexStr: String; pbyteArray: PByte; InputLength: WORD);
Конст
HexChars: Массив [0..15] символов = '0123456789ABCDEF';
вар
я, j: СЛОВО;
начинать
SetLength(hHexStr, (InputLength * 2));
FillChar(hHexStr, sizeof(hHexStr), #0);
j := 1;
для i := 1 до InputLength начните
hHexStr[j] := Char(HexChars[pbyteArray^ shr 4]);
hHexStr[j] := Char(HexChars[pbyteArray^ and 15] Inc(j);
вкл (pbyteArray);
конец;
конец;
процедура HexBytesToChar (var Response: String; hexbytes: PChar; InputLength: WORD);
вар
я: СЛОВО;
с: байт;
начинать
SetLength (Ответ, InputLength);
FillChar(Ответ, SizeOf(Ответ), #0);
для i := 0 до (InputLength - 1) начните
c := БАЙТ(шестнадцатеричные байты[i]) И БАЙТ($f);
если с > 9, то
Инк(ок, 37$)
еще
Inc(c, 30$);
Ответ[i + 1] := char(c);
конец;{для}
конец;
процедура HexStrToBytes (hHexStr: String; pbyteArray: Pointer);
{pbyteArray должен указывать на достаточно памяти для хранения вывода}
вар
я, j: СЛОВО;
темпППТр: PChar;
две цифры: String[2];
начинать
tempPtr: = pbyteArray;
j := 1;
для i := 1 до (Length(hHexStr) DIV 2) начните
twoDigits := Copy(hHexStr, j, 2 Inc(j, 2);
PByte(tempPtr)^ := StrToInt('$' + twoDigits Inc(tempPtr);
конец;{для}
конец;
конец.
-------------------------------------------------- ----------------------------------
-------------------------------------------------- ----------------------------------
UNIT Строка16.
интерфейс
{$IFNDEF Win32}
процедура SetLength (var S: строка; Len: целое число);
процедура SetString (var Dst: строка; Src: PChar; Len: Integer);
{$ENDIF}
выполнение
{$IFNDEF Win32}
процедура SetLength (var S: строка; Len: целое число);
начинать
если Len > 255, то
S[0] := Chr(255)
еще
S[0] := Chr(Len)
конец;
процедура SetString (var Dst: string; Src: PChar; Len: Integer);
начинать
если Len > 255, то
Переместить(Src^, Dst[1], 255)
еще
Move(Src^, Dst[1], Len);
SetLength(Дст, Лен);
конец;
{$ENDIF}
конец.
=============================================== ===============
4. Двоичный формат в десятичный
-------------------------------------------------- ---------------
/////////////////////////////////////////////////// /
// конвертируем 32-битную базу 2 в 32-битную базу 10 //
// максимальное число = 99 999 999, возвращаем -1, если больше //
/////////////////////////////////////////////////// /
функция Base10(Base2:Integer): Целое число;
Асм
cmp eax,100000000 // проверка верхнего предела
джб @1 // ок
mov eax,-1 // флаг ошибки
jmp @exit // выход с -1
@1:
push ebx // сохраняем регистры
нажать esi
xor esi,esi // результат = 0
mov ebx,10 // база переключателя 10
mov ecx,8 // 8 полубайтов (10^8-1)
@2:
mov edx,0 // очищаем остаток
div ebx // eax DIV 10, edx mod 10
добавить esi,edx // результат = результат + остаток[I]
ror esi,4 // сдвиг полубайта
цикл @2 // цикл для всех 8 полубайтов
mov eax,esi // результат функции
pop esi // восстанавливаем регистры
поп-эбкс
@Выход:
конец;
-------------------------------------------------- ----------------------------------
Метод.2
[Оливер Таунсенд, [email protected]]
-------------------------------------------------- ----------------------------------
функция IntToBin (Значение: LongInt; Размер: целое число): String;
вар
я: целое число;
начинать
Результат:=';
for i:=Размер до 0, начните
если Value и (1 shl i)<>0, то начинаем
Результат:=Результат+'1';
конец еще начинается
Результат:=Результат+'0';
конец;
конец;
конец;
функция BinToInt (Значение: String): LongInt;
вар
я, Размер: Целое число;
начинать
Результат:=0;
Размер:=Длина(Значение);
for i:=Размер до 0, начните
если Copy(Value,i,1)='1', то начнем
Результат:=Результат+(1 шл я);
конец;
конец;
конец;
=============================================== ========================