分享
 
 
 

Delphi下常用转换(一)

王朝delphi·作者佚名  2006-01-08
窄屏简体版  字體: |||超大  

Delphi下常用转换

作者:lyboy99

e-mail:lyboy99@sina.com

url: http://hnh.126.com

给大家提供几个常用的转换方法和其转换函数

希望可以对你有帮助

1.HEX -> Integer

2.2.Dec To HEX

3.ASCII to HEX / math

4.Binary to decimal

==============================================================

1.HEX -> Integer

==============================================================

方法. 1

--------------------------------------------------------------------------------

var

i : integer

s : string;

begin

s := '$' + ThatHexString;

i := StrToInt(a);

end;

--------------------------------------------------------------------------------

方法. 2

--------------------------------------------------------------------------------

CONST HEX : ARRAY['A'..'F'] OF INTEGER = (10,11,12,13,14,15);

VAR str : String;

Int,

i : integer;

BEGIN

READLN(str);

Int := 0;

FOR i := 1 TO Length(str) DO

IF str[i] < 'A' THEN Int := Int * 16 + ORD(str[i]) - 48

ELSE Int := Int * 16 + HEX[str[i]];

WRITELN(Int);

READLN;

END.

===================================================

2.Dec To HEX

--------------------------------------

HexString := Format('%0x',DecValue);

--------------------------------------

====================================================

3.ASCII to HEX / math

------------------------

unit Hexstr;

interface

uses String16, SysUtils;

Type

PByte = ^BYTE;

procedure BytesToHexStr(var hHexStr: String; pbyteArray: PByte; InputLength: WORD);

procedure HexStrToBytes(hHexStr: String; pbyteArray: Pointer);

procedure HexBytesToChar(var Response: String; hexbytes: PChar; InputLength: WORD);

implementation

procedure BytesToHexStr(var hHexStr: String; pbyteArray: PByte; InputLength: WORD);

Const

HexChars : Array[0..15] of Char = '0123456789ABCDEF';

var

i, j: WORD;

begin

SetLength(hHexStr, (InputLength * 2));

FillChar(hHexStr, sizeof(hHexStr), #0);

j := 1;

for i := 1 to InputLength do begin

hHexStr[j] := Char(HexChars[pbyteArray^ shr 4]); inc(j);

hHexStr[j] := Char(HexChars[pbyteArray^ and 15]); inc(j);

inc(pbyteArray);

end;

end;

procedure HexBytesToChar(var Response: String; hexbytes: PChar; InputLength: WORD);

var

i: WORD;

c: byte;

begin

SetLength(Response, InputLength);

FillChar(Response, SizeOf(Response), #0);

for i := 0 to (InputLength - 1) do begin

c := BYTE(hexbytes[i]) And BYTE($f);

if c > 9 then

Inc(c, $37)

else

Inc(c, $30);

Response[i + 1] := char(c);

end;{for}

end;

procedure HexStrToBytes(hHexStr: String; pbyteArray: Pointer);

{pbyteArray must point to enough memory to hold the output}

var

i, j: WORD;

tempPtr: PChar;

twoDigits : String[2];

begin

tempPtr := pbyteArray;

j := 1;

for i := 1 to (Length(hHexStr) DIV 2) do begin

twoDigits := Copy(hHexStr, j, 2); Inc(j, 2);

PByte(tempPtr)^ := StrToInt('$' + twoDigits); Inc(tempPtr);

end;{for}

end;

end.

--------------------------------------------------------------------------------

--------------------------------------------------------------------------------

UNIT String16.

interface

{$IFNDEF Win32}

procedure SetLength(var S: string; Len: Integer);

procedure SetString(var Dst: string; Src: PChar; Len: Integer);

{$ENDIF}

implementation

{$IFNDEF Win32}

procedure SetLength(var S: string; Len: Integer);

begin

if Len > 255 then

S[0] := Chr(255)

else

S[0] := Chr(Len)

end;

procedure SetString(var Dst: string; Src: PChar; Len: Integer);

begin

if Len > 255 then

Move(Src^, Dst[1], 255)

else

Move(Src^, Dst[1], Len);

SetLength(Dst, Len);

end;

{$ENDIF}

end.

=================================================================

4.Binary to decimal

-----------------------------------------------------------------

////////////////////////////////////////////////

// convert 32 bit base2 to 32 bit base10 //

// max number = 99 999 999, return -1 if more //

////////////////////////////////////////////////

function Base10(Base2:Integer) : Integer; assembler;

asm

cmp eax,100000000 // check upper limit

jb @1 // ok

mov eax,-1 // error flag

jmp @exit // exit with -1

@1:

push ebx // save registers

push esi

xor esi,esi // result = 0

mov ebx,10 // diveder base 10

mov ecx,8 // 8 nibbles (10^8-1)

@2:

mov edx,0 // clear remainder

div ebx // eax DIV 10, edx mod 10

add esi,edx // result = result + remainder[I]

ror esi,4 // shift nibble

loop @2 // loop for all 8 nibbles

mov eax,esi // function result

pop esi // restore registers

pop ebx

@exit:

end;

--------------------------------------------------------------------------------

方法. 2

[Oliver Townshend, oliver@zip.com.au]

--------------------------------------------------------------------------------

function IntToBin(Value: LongInt;Size: Integer): String;

var

i: Integer;

begin

Result:='';

for i:=Size downto 0 do begin

if Value and (1 shl i)<>0 then begin

Result:=Result+'1';

end else begin

Result:=Result+'0';

end;

end;

end;

function BinToInt(Value: String): LongInt;

var

i,Size: Integer;

begin

Result:=0;

Size:=Length(Value);

for i:=Size downto 0 do begin

if Copy(Value,i,1)='1' then begin

Result:=Result+(1 shl i);

end;

end;

end;

===========================================================================

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有