Solved

need some good Hex to string / String to Hex functions

Posted on 2010-09-15
5
327 Views
Last Modified: 2012-05-10
I have a form with two memos and two butons (hex to text & text to hex)

I need two functions which can take hex and convert to text and visa versa

bonus is you add exceptions (error code checking)

thanks
0
Comment
Question by:Looking_4_Answers
  • 3
  • 2
5 Comments
 

Author Comment

by:Looking_4_Answers
Comment Utility
example, would be:

http://www.dolcevie.com/js/converter.html


without the colons  (maybe spaces instead)
0
 
LVL 25

Expert Comment

by:epasquier
Comment Utility
Here is already the one that I talked you about. It can manage a lot of formatting options. You might want to simplify this : drop the C definition and Indentation functionalities - they are useful with C code generation.

It is also based on a pointer on Char and a number of characters. This is more versatile as it can be used to convert about anything, but you might prefer a simple String parameter for input.

Other parameters : Col & Hewawidth controls the grouping of hexa bytes in columns and lines.
HexaWidth will be the Nb of bytes that are rendered together without spaces between. Ex : 4 will show display the hexa values for 32 bits.
Col is the number of bytes before a line ret is added. Col must be a multiple of HexaWidth, except if Col =0 (no line ret)

Ex : Col = 6, HexaWidth =2 will return something like for a buffer of 9 bytes:
A0B6 F43D 76A3
98D6 3F

The same with Col=0 and HexaWidth=1 (the simple one byte separated hexa formatting)
A0 B6 F4 3D 76 A3 98 D6 3F

Function BufToHexStr(N:Cardinal;Buf:pCharTab;Col:Byte=0;HexaWidth:Byte=0;CDef:Boolean=False;Indent:Byte=0):String;

Var

 i:Integer;

 Hdr,Ftr,NewL,IdtStr:String;

begin

 if Buf=nil Then Exit;

 IdtStr:=DupeString(' ',Indent);

 NewL:=CRLF+IdtStr;

 if CDef Then

  begin

   Result:='{ ';

   Hdr:='0x';

   Ftr:=' ,';

  end Else

  begin

   Result:='';

   Ftr:=' ';

   Hdr:='';

  end;

 if HexaWidth>0 Then while (Col MOD HexaWidth)>0 do Dec(HexaWidth);

 For i:=0 to N-1 do

  begin

   if (i>0) And (HexaWidth>0) And ((i Mod HexaWidth)=0) Then Result:=Result+Ftr;

   if (Col>0) And (i>0) And ((i Mod Col)=0) Then

    begin

     Result:=Result+NewL;

     if CDef Then Result:=Result+'  ';

    end;

   Result:=Result+Hdr+HexaChar(Buf^[i]);

  end;

 if CDef Then Result:=Result+NewL+'}';

end;

Open in new window

0
 
LVL 25

Expert Comment

by:epasquier
Comment Utility
And this is the reverse, it can ignore any characters that is not hexa digit and consider those as separators
Note that the hexa digits don't have to be paired if separated, for ex.
9B 06 3F = 9B 6 3F = 9B06,3F

I added the same exception mechanism for you as in the Bin convertion, as I'm sure your next question is how try this one conversion and if it fails call the String To Hexa ;o)

I also simplified BufToHexStr and removed any reference to other functions I have
Function HexaStrToBuf(Src:ANSIString;ThrowException:Boolean=False):ANSIString;

begin

 For i:=1 to Length(Src) do

  if Not (Src[i] IN ['0'..'9','A'..'F']) Then 

   begin

    if ThrowException And Not (Src[i] In [' ',#13,#10]) Then Raise Exception.Create('Invalid Hexa character');

    Text[i]:=' ';

   end;

 P:=1;

 Result:='';

 While P<=Length(Src) do if Src[P]=' ' Then Inc(P) Else

  begin

   Result:=Result+Char(StrToInt('$'+Trim(Copy(Src,P,2))));

   Inc(P,2);

  end;

end;



Function BufToHexStr(Src:ANSIString;Col:Byte=0;HexaWidth:Byte=0):ANSIString;

Var

 i:Integer;

begin

 Result:='';

 if HexaWidth>0 Then while (Col MOD HexaWidth)>0 do Dec(HexaWidth);

 For i:=0 to Length(Src)-1 do

  begin

   if (i>0) And (HexaWidth>0) And ((i Mod HexaWidth)=0) Then Result:=Result+' ';

   if (Col>0) And (i>0) And ((i Mod Col)=0) 

    Then Result:=Result+#13#10;

   Result:=Result+Format('%2.2x',[Byte(Src[i+1])]);

  end;

end;

Open in new window

0
 

Author Comment

by:Looking_4_Answers
Comment Utility
kool, i will test it - thanks
0
 
LVL 25

Accepted Solution

by:
epasquier earned 500 total points
Comment Utility
are you done testing ? do you need something else ?
0

Featured Post

What Should I Do With This Threat Intelligence?

Are you wondering if you actually need threat intelligence? The answer is yes. We explain the basics for creating useful threat intelligence.

Join & Write a Comment

Suggested Solutions

Title # Comments Views Activity
Delphi XE7 Rest Client 2 172
Strange message in Delphi 10 Seattle 1 463
Delphi OLE Error 8 82
Convert Jpg /PNG To GIF 5 102
The uses clause is one of those things that just tends to grow and grow. Most of the time this is in the main form, as it's from this form that all others are called. If you have a big application (including many forms), the uses clause in the in…
In this tutorial I will show you how to use the Windows Speech API in Delphi. I will only cover basic functions such as text to speech and controlling the speed of the speech. SAPI Installation First you need to install the SAPI type library, th…
Get a first impression of how PRTG looks and learn how it works.   This video is a short introduction to PRTG, as an initial overview or as a quick start for new PRTG users.
Here's a very brief overview of the methods PRTG Network Monitor (https://www.paessler.com/prtg) offers for monitoring bandwidth, to help you decide which methods you´d like to investigate in more detail.  The methods are covered in more detail in o…

744 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

18 Experts available now in Live!

Get 1:1 Help Now