请问delphi中有没有将二进制转换成十六进制的函数? ( 积分: 100 )

  • 主题发起人 主题发起人 doby_li
  • 开始时间 开始时间
D

doby_li

Unregistered / Unconfirmed
GUEST, unregistred user!
如何使用这个bintohex函数?
我用如下代码不行呀.

procedure TForm1.Button7Click(Sender: TObject);
var s1,s2:pchar;
begin
s1:= '01111111 ';
bintohex(s1,s2,8);
showmessage(s2);
end;

我就是想显示出结果7F
谢谢.
 
这是不很简单吗, 一个循环,十几个判断就出来了
自己调试一下
var
k, i: integer;
s1, s2: string;
r: string;
begin
s1:='01111111 ';
if trunc(length(s1)/4)=length(s1)/4
k:=length(s1)/4
else
k:=trunc(length(s1)/4)+1;
for i:=1 to k do begin
s2:=copy(s1, ...); //从右边开始取4位
if s2='0001' then
r:='1'+r
else if s2='0002' then
r:='2'+r
else ....
end;
end
 
我是要这样的功能,输入01111111 输出则为:7F
也是输入一个8位的二进制字符串,输出一个16进制的字符串.
我用的是bintohex函数,请问我的代码应如何改?
procedure TForm1.Button7Click(Sender: TObject);
var s1,s2:pchar;
begin
s1:=StrAlloc(1024);
StrCopy(s1,'01111111');
s2:=StrAlloc(1024);
bintohex(s1,s2,8);
showmessage(string(s2));
end;
这样显示出来的是:3031313131313131
而不是我所期望的:7F
 
我现在找到了一个用vb写的函数:
用途:将二进制转化为十六进制
Public Function BIN_to_HEX(ByVal Bin As String) As String
Dim i As Long
Dim H As String
If Len(Bin) Mod 4 < > 0 Then
Bin = String(4 - Len(Bin) Mod 4, &quot;0 &quot;) &amp; Bin
End If

For i = 1 To Len(Bin) Step 4
Select Case Mid(Bin, i, 4)
Case &quot;0000 &quot;: H = H &amp; &quot;0 &quot;
Case &quot;0001 &quot;: H = H &amp; &quot;1 &quot;
Case &quot;0010 &quot;: H = H &amp; &quot;2 &quot;
Case &quot;0011 &quot;: H = H &amp; &quot;3 &quot;
Case &quot;0100 &quot;: H = H &amp; &quot;4 &quot;
Case &quot;0101 &quot;: H = H &amp; &quot;5 &quot;
Case &quot;0110 &quot;: H = H &amp; &quot;6 &quot;
Case &quot;0111 &quot;: H = H &amp; &quot;7 &quot;
Case &quot;1000 &quot;: H = H &amp; &quot;8 &quot;
Case &quot;1001 &quot;: H = H &amp; &quot;9 &quot;
Case &quot;1010 &quot;: H = H &amp; &quot;A &quot;
Case &quot;1011 &quot;: H = H &amp; &quot;B &quot;
Case &quot;1100 &quot;: H = H &amp; &quot;C &quot;
Case &quot;1101 &quot;: H = H &amp; &quot;D &quot;
Case &quot;1110 &quot;: H = H &amp; &quot;E &quot;
Case &quot;1111 &quot;: H = H &amp; &quot;F &quot;
End Select
Next i
While Left(H, 1) = &quot;0 &quot;
H = Right(H, Len(H) - 1)
Wend
BIN_to_HEX = H
End Function
 
procedure TForm1.Button7Click(Sender: TObject);
var s1,s2:pchar;
begin
s1:= '01111111 ';
GetMem(s2,16);
bintohex(s1,s2,8);
showmessage(s2);
FreeMem(s2);
end;
 
bintohex是将 '01111111 '按字符逐个转换成十六进制,相当于format('%.2x',[ord('0'),ord(1)...]).
s2需要分配存储,getmem(s2,Len)或new(s2)
楼上的方法可以....
 
哈哈又来这了
方法1
function BinToHex(Bin: String): String;
var
i : integer;
tmp : integer;
iLen : integer;
begin
tmp := 0;
//Bin := ReverseString(Bin);
iLen := Length(Bin);
for i := 1 to iLen do begin
tmp := tmp + Min(StrToIntDef(Bin,0),1) shl (iLen - i);
end;
Result := Format('%.2X',[tmp]);
end;
方法2
function BinToHex(Bin:string):string;
var
I,J:Integer;
Sum:Integer;
begin
if Length(Bin) mod 4 <>0 then
for I:=1 to 4-Length(Bin) mod 4 do
Bin:='0'+Bin;

Sum:=0;
for I:=1 to Length(Bin) do
begin
Sum:=Sum*2+StrToInt(Bin);
if I mod 4=0 then
begin
case Sum of
0..9:Result:=Result+IntToStr(Sum);
10..15:Result:=Result+Chr(65+Sum-10);//65是A的ASCII
end;
Sum:=0;
end;
end;
end;
 
谢谢各位.
 
多人接受答案了。
 
后退
顶部