100分求:把普通字符串(string)转换为十六进制字符串的函数?(100分)

  • 主题发起人 主题发起人 vc3000
  • 开始时间 开始时间
V

vc3000

Unregistered / Unconfirmed
GUEST, unregistred user!
把普通字符串(string)转换为十六进制字符串的函数?
例:
var str,strHex:string;
...
str:='ABC';
strHex:=StrToHex(str);//strHex:='414243'
...
 
function StrToHexStr(const Value: string): string;
var
i, Index: Integer;
begin
Result := '';
for i := 1 to Length(Value) do
begin
Index := Ord(Value);
Result := Result + IntToHex(Index,0);
end;
end;

不知道这个简单函数能不能满足你的要求?
 
明天若还需要的话,告诉我xiuxiujx@163.com,再发给你吧。
 
我以前做过,代码是这样的。
动态连接库:library Project1;

uses
Unit1 in 'Unit1.pas' {Form1};

{$R *.RES}
exports
gethexd,getlinebyte,gettotalbyte;

begin

end.

调用:
var
Form1: TForm1;
function gethexd(str:pchar):pchar;stdcall;external'Project1.dll';
function getlinebyte(str:pchar):pchar;stdcall;external'Project1.dll';
function gettotalbyte(str:pchar):pchar;stdcall;external'Project1.dll';

implementation

{$R *.DFM}

procedure TForm1.Button1Click(Sender: TObject);
var s:string;
begin
memo1.clear;
s:=gethexd(pchar(edit1.text));
memo1.lines.Add(s);
edit2.text:=string(getlinebyte(pchar(edit1.text)));
edit3.text:=string(gettotalbyte(pchar(edit1.text)));
end;


绝对OK的。你试试吧。
 
怎么越搞越复杂,这样不就得了:
function StrToHex(const S: String): String;
const
HexS = '0123456789ABCDEF';
var
I, N, X: Integer;
begin
N:= Length(S);
SetLength(Result, N * 2);
for I:= 1 to N do begin
X:= Ord(S);
Result[I*2-1]:= HexS[(X shr 4)+1];
Result[I*2]:= HexS[(X mod 16)+1];
end;
end;
 

什么呀,越说越复杂,一句话搞定:

strHex := IntToStr(StrToInt('$' + str));

呵呵,够简洁的答案:)

 
beta厉害~~~~~~ 那么'ABC123'怎么办呀?

function StrToHex(const s: string
Pref: Boolean = True): string;
var
i: Integer;
begin
result := '';
if s = '' then
result := '0'
else
for i := 1 to length(s) do
result := result + uppercase(inttohex(byte(s), 2));
if pref then result := '0x'+result;
end;

我常这么用这个函数~~~
adocommand1.commandtext := 'insert into table (textfield) values ('+inttohex(memo1.lines.text)+')';
 
to Pearl: 没有问题啊,用我那一句话一样可以算出 'ABC123' -> 11256099
啊!你用计算器核实一遍?:)[:D]

 
function StrToHexStr(const s: string): string;
var
i: Integer;
begin
result:=''

for i:=1 to length(s) do result:=result+format('%2X',[ord(s)]);
end;
 
大家帮我核实一下以上各位的答案!
 
我试过了,以上的答案好象都可以,只是代码长度不同而已。
 
放心吧,我那一行代码绝对是用计算器核实通过的:)

 
to beta
楼主要得是 'ABC'->'414243',而不是'ABC'->'2748',这好像用计算器算不出来吧
你算算这个'HIJK'
 
啊?有没有搞错,这叫“十六进制字符串”?呵呵[:D]

那就用他们的方法吧,算我没说。[:(]
也怪我看题目不仔细啦。
 
多人接受答案了。
 

Similar threads

S
回复
0
查看
1K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
900
SUNSTONE的Delphi笔记
S
S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
后退
顶部