Delphi での一般的な変換
著者:lyboy99
電子メール:[email protected]
URL: http://hnh.126.com
一般的に使用されるいくつかの変換方法とその変換関数を提供します。
お役に立てば幸いです
1.HEX -> 整数
2.2.12 月から 16 日まで
3.ASCII から 16 進数への変換
4.2進数から10進数へ
================================================= ============
1.HEX -> 整数
================================================= ============
方法.1
-------------------------------------------------- ----------------------------------
変数
i : 整数
s : 文字列;
始める
s := '$' + ThatHexString;
i := StrToInt(a);
終わり;
-------------------------------------------------- ----------------------------------
方法.2
-------------------------------------------------- ----------------------------------
Const HEX : ARRAY['A'..'F'] OF INTEGER = (10,11,12,13,14,15);
VAR str : 文字列;
イント、
i : 整数;
始める
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]];
WRITELN(Int);
読んでください;
終わり。
================================================= =
2.12 月から 16 日まで
-----------------------------------------------
HexString := Format('%0x',DecValue);
-----------------------------------------------
================================================= ==
3.ASCII から 16 進数への変換
------------------------
単位 Hexstr;
インタフェース
String16、SysUtils を使用します。
タイプ
Pバイト = ^BYTE;
PROcedure BytesToHexStr(var hHexStr: String; pbyteArray: PByte; InputLength: Word);
プロシージャ HexStrToBytes(hHexStr: 文字列; pbyteArray: ポインタ);
プロシージャ HexBytesToChar(var 応答: 文字列; 16 進数: PChar; 入力長: WORD);
実装
プロシージャ BytesToHexStr(var hHexStr: String; pbyteArray: PByte; InputLength: WORD);
定数
HexChars : Array[0..15] of Char = '0123456789ABCDEF';
変数
i、j: 単語;
始める
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^ and 15]);
inc(pbyteArray);
終わり;
終わり;
プロシージャ HexBytesToChar(var 応答: 文字列; 16 進数: PChar; 入力長: WORD);
変数
i: 単語;
c:バイト。
始める
SetLength(応答, 入力長);
FillChar(Response, SizeOf(Response), #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 は出力を保持するのに十分なメモリを指している必要があります}
変数
i、j: 単語;
tempPPTr: PChar;
二桁: 文字列[2];
始める
tempPtr := pbyteArray;
j := 1;
for i := 1 to (Length(hHexStr) DIV 2) が始まります
twoDigits := Copy(hHexStr, j, 2);
PByte(tempPtr)^ := StrToInt('$' + twoDigits);
終了;{for}
終わり;
終わり。
-------------------------------------------------- ----------------------------------
-------------------------------------------------- ----------------------------------
ユニット文字列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(Len)
終わり;
プロシージャ 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 を返します //
//////////////////////////////////////////////// /
関数 Base10(Base2:Integer) : アセンブラ;
アズム
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 mod 10
add esi,edx // 結果 = 結果 + 剰余[I]
ror esi,4 // ニブルをシフト
loop@2 // 8 つのニブルすべてをループします
mov eax,esi // 関数の結果
Pop esi // レジスタを復元する
ポップebx
@出口:
終わり;
-------------------------------------------------- ----------------------------------
方法.2
[オリバー・タウンゼント、[email protected]]
-------------------------------------------------- ----------------------------------
関数 IntToBin(値: LongInt;サイズ: 整数): 文字列;
変数
i: 整数。
始める
結果:=';
for i:=サイズを 0 まで小さくして開始します
値と (1 shl i)<>0 の場合、開始します
結果:=結果+'1';
終了、そうでない場合は開始
結果:=結果+'0';
終わり;
終わり;
終わり;
関数 BinToInt(値: 文字列): LongInt;
変数
i、サイズ: 整数;
始める
結果:=0;
サイズ:=長さ(値);
for i:=サイズを 0 まで小さくして開始します
Copy(Value,i,1)='1' の場合、開始します
結果:=結果+(1 shl i);
終わり;
終わり;
終わり;
================================================= =========================