Delphi의 일반적인 변환
저자:lyboy99
URL: http://hnh.126.com
일반적으로 사용되는 여러 가지 변환 방법과 해당 변환 기능을 제공합니다.
그것이 당신에게 도움이 되기를 바랍니다
1.HEX -> 정수
2.2.12월 HEX로
3.ASCII에서 HEX/수학으로
4.2진수를 10진수로
================================================= ============
1.HEX -> 정수
================================================= ============
방법.1
------------------------------------- ----------------------------------
var
나는 : 정수
s : 문자열;
시작하다
s := '$' + ThatHexString;
i := StrToInt(a);
끝;
------------------------------------- ----------------------------------
방법 2
------------------------------------- ----------------------------------
CONST HEX : 정수의 배열['A'..'F'] = (10,11,12,13,14,15);
VAR str : 문자열;
정수,
나는 : 정수;
시작하다
READLN(str);
정수 := 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]];
WRITELN(Int);
READLN;
끝.
================================================= =
2.12월 HEX로
----------------------------------
HexString := Format('%0x',DecValue);
----------------------------------
================================================= ==
3.ASCII에서 HEX/수학으로
-------------
단위 Hexstr;
인터페이스
String16, SysUtils를 사용합니다.
유형
P바이트 = ^BYTE;
PRocedure BytesToHexStr(var hHexStr: 문자열; pbyteArray: PByte; InputLength: Word);
절차 HexStrToBytes(hHexStr: 문자열; pbyteArray: 포인터);
절차 HexBytesToChar(var 응답: 문자열; hexbytes: PChar; InputLength: WORD);
구현
절차 BytesToHexStr(var hHexStr: 문자열; pbyteArray: PByte; InputLength: WORD);
상수
HexChars : Char의 배열[0..15] = '0123456789ABCDEF';
var
i, j: WORD;
시작하다
SetLength(hHexStr, (InputLength * 2));
FillChar(hHexStr, sizeof(hHexStr), #0);
j := 1;
for i := 1부터 InputLength까지 시작
hHexStr[j] := Char(HexChars[pbyteArray^ shr 4]);
hHexStr[j] := Char(HexChars[pbyteArray^ 및 15]) inc(j);
inc(pbyteArray);
끝;
끝;
절차 HexBytesToChar(var 응답: 문자열; hexbytes: PChar; InputLength: WORD);
var
나: 단어;
c: 바이트;
시작하다
SetLength(응답, 입력 길이);
FillChar(응답, SizeOf(응답), #0);
for i := 0 ~ (InputLength - 1) 시작
c := BYTE(hexbytes[i]) 및 BYTE($f);
c > 9이면
Inc(c, $37)
또 다른
Inc(c, $30);
응답[i + 1] := char(c);
끝;{for}
끝;
절차 HexStrToBytes(hHexStr: 문자열; pbyteArray: 포인터);
{pbyteArray는 출력을 보관하기에 충분한 메모리를 가리켜야 합니다.}
var
i, j: WORD;
temPPTr: PChar;
twoDigits: 문자열[2];
시작하다
tempPtr := pbyteArray;
j := 1;
for i := 1 ~ (Length(hHexStr) DIV 2) 시작
twoDigits := Copy(hHexStr, j, 2); Inc(j, 2);
PByte(tempPtr)^ := StrToInt('$' + twoDigits) Inc(tempPtr);
끝;{for}
끝;
끝.
------------------------------------- ----------------------------------
------------------------------------- ----------------------------------
UNIT 문자열16.
인터페이스
{$IFNDEF Win32}
절차 SetLength(var S: 문자열; Len: 정수);
절차 SetString(var Dst: 문자열; Src: PChar; Len: 정수);
{$ENDIF}
구현
{$IFNDEF Win32}
절차 SetLength(var S: 문자열; Len: 정수);
시작하다
Len > 255이면
S[0] := Chr(255)
또 다른
S[0] := Chr(렌)
끝;
절차 SetString(var Dst: 문자열; Src: PChar; Len: 정수);
시작하다
Len > 255이면
이동(Src^, Dst[1], 255)
또 다른
Move(Src^, Dst[1], Len);
SetLength(Dst, Len);
끝;
{$ENDIF}
끝.
================================================= ===============
4.2진수를 10진수로
------------------------------------- ---------------
///////////////////////////////////////////////// /
// 32비트 base2를 32비트 base10으로 변환 //
// 최대 수 = 99 999 999, 그 이상인 경우 -1 반환 //
///////////////////////////////////////////////// /
function Base10(Base2:Integer) : 정수 어셈블러;
asm
cmp eax,100000000 // 상한 확인
jb @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 모드 10
esi,edx를 추가합니다 // 결과 = 결과 + 나머지[I]
ror esi,4 // 니블 시프트
loop@2 // 8개 니블 모두에 대한 루프
mov eax,esi // 함수 결과
pop esi // 레지스터 복원
팝 ebx
@출구:
끝;
------------------------------------- ----------------------------------
방법 2
[올리버 타운센드, [email protected]]
------------------------------------- ----------------------------------
함수 IntToBin(값: LongInt;크기: 정수): 문자열;
var
i: 정수;
시작하다
결과:=';
i:=크기를 0으로 낮추면 시작됩니다.
값이 있고 (1 shl i)<>0이면 시작합니다.
결과:=결과+'1';
끝 아니면 시작
결과:=결과+'0';
끝;
끝;
끝;
함수 BinToInt(값: 문자열): LongInt;
var
i,크기: 정수;
시작하다
결과:=0;
크기:=길이(값);
i:=크기를 0으로 낮추면 시작됩니다.
Copy(Value,i,1)='1'이면 시작됩니다.
결과:=결과+(1 shl i);
끝;
끝;
끝;
================================================= =========================