MathGroup Archive 2001

[Date Index] [Thread Index] [Author Index]

Search the Archive

Re: Re: converting hex strings

  • To: mathgroup at smc.vnet.net
  • Subject: [mg27464] Re: [mg27434] Re: converting hex strings
  • From: maarten.vanderburgt at icos.be
  • Date: Tue, 27 Feb 2001 00:37:17 -0500 (EST)
  • Sender: owner-wri-mathgroup at wolfram.com

Bob, Allan, Paul,

With the suggestion to use the " " around 16^^, it was not too difficult to
convert 32 bit floating point numbers in hexadecimal format to a decimal
number, knowing the IEEE format:

hexToFloat[x_String] := Module[{str, dig , expo, mant, tt},
      str = StringJoin["16^^", x];
      dig = IntegerDigits[ToExpression[str], 2];
      dig = PadLeft[dig, 32];
      expo = FromDigits[dig[[Range[2, 9]]], 2] - 127;
      tt = Table[1./2^i, {i, 1, 23}];
      mant = 1. + Plus @@ (tt*dig[[Range[10, 32]]]);
      If[dig[[1]] == 0, mant 2^expo, -mant 2^expo]
      ];

In[72]:= hexToFloat[#]&/@{"42c80000", "bdfcd35b","3dfcd35b", "bf800000"}
Out[72]= {100., -0.12345, 0.12345, -1.}


Thanks a lot for your help

Maarten





"Paul Lutus" <nospam at nosite.com> on 26-02-2001 02:55:37 AM

cc:

Subject: [mg27464]  [mg27434] Re: converting hex strings


<maarten.vanderburgt at icos.be> wrote in message
news:97a7b2$aks at smc.vnet.net...
> Hallo,
>
> I have a list of hexadecimal strings (read from a hex string text file):
> e.g. {"01a0", "fffe", "0080"} representing integers.
> How can I convert such a list to integers so that I get {416, 4094, 128}?
> I cannot make a function using something like
>
> hextoint = 16^^#&
>
> or
>
> hextoin = 16^^ToExpression[#]&
>
> I get errors like below:
>
> In[44]:= hexstr = "a1b0"
>          t = ToExpression[hexstr];
>          16^^t
> General::"digit": "Digit at position \!\(1\) in \!\(\"t\"\) is too large
to
> \
> be used in base \!\(16\)."
>
> Where does this error come from?
>
> While this works ok:
> In[43]:= 16^^a1b0
> Out[43]= 41392
>
> The ToExpression[ ] also would give problems: ToExpression["01a0"]
returns
> 0.
>
> Has anyone done anything along these lines?

I think this will do it for you:

myhex[x_String] := Module[
      {str},
      str = StringJoin["16^^",x];
      ToExpression[str]
      ];

data = {"01a0","fffe","0080"};

Map[myhex,data]

{416,65534,128}

> How would I have to convert a hex list representing floats (IEEE floating
> point standard)?, e.g. {"42c8000", "3dfcd35b", "bf80000"} which should
> convert to {100.0, 0.12345, -1.0} in a decimal notation.

I think that will be much more difficult -- it will require a full grasp of
the IEEE specification within the converter code.

--
Paul Lutus
www.arachnoid.com










  • Prev by Date: Re: Integrate a matrix-function
  • Next by Date: out of memory, again.
  • Previous by thread: Re: converting hex strings
  • Next by thread: RE: Re: converting hex strings