x
Solved

# Convert hex string to double

Posted on 2007-11-27
Medium Priority
4,525 Views
double xx=0;
string txt=null;

txt = "0942afc8131d6837";

xx=Double.Parse(txt, System.Globalization.NumberStyles.HexNumber);

this complies fine but when I run the application I get this error "An unhandled exception of type 'System.ArgumentException' occurred in mscorlib.dll"

Is there a function in C# 2005 that will take a string Hex number and convert it to a double?
0
Question by:lcrogers
• 4
• 2
• 2

LVL 55

Expert Comment

ID: 20361683
there is not, but you can build one by your own:

double hex2double(string hex)
{
double result = 0.0;
foreach (char c in hex)
{
double val = (double)System.Convert.ToInt32(c.ToString(),16);
result = result * 16.0 + val;
}
return result;
}
0

LVL 6

Accepted Solution

Roopesh_7 earned 750 total points
ID: 20361764
Hi friend,
Use below method to convert

double xx = 0;
string txt = null;

txt = "0942afc8131d6837";

xx = Convert.ToInt64(txt, 16);
Response.Write(xx);

0

Author Comment

ID: 20361813
I need it to be a doule precession number,  this will give me a whole number.
0

LVL 55

Expert Comment

ID: 20361951
what do you mean with a double precision number? both examples comply with your question.
0

LVL 6

Expert Comment

ID: 20362008
string txt = null;

txt = "0942afc8131d6837";

txt = Convert.ToInt64(txt, 16).ToString("#0.00");

give a string format at the end......

then convert that string to double by convert.todouble(txt );
0

Author Comment

ID: 20362123
it must be converted to a negetive earth center to earth fix number (exsample: -53512345.3567N, -36512342.3345E;  I am getting these values from a military GPS grid system.

0

LVL 55

Expert Comment

ID: 20362412
you have to do it with unsafe code. Assuming both coordinates are inside a single hex:

unsafe public static void Transform(string hex, out float x, out float y)
{
UInt32 x0 = System.Convert.ToUInt32(hex.Substring(0, 8), 16);   // first half of hex code
UInt32 y0 = System.Convert.ToUInt32(hex.Substring(8, 8), 16);   // last half of hex code

x = *((float *)&x0);
y = *((float *)&y0);
}

Assumming it is just one component:
unsafe public static void Transform(string hex, out double a)
{
UInt64 a0 = System.Convert.ToUInt64(hex16);
a = *((double *)&a0);
}

but with the sample hex string you have provided, it doesn't output any valid value as you shown.
Also, you have to take care about the byte ordering (big/little endian)
0

LVL 55

Expert Comment

ID: 20362416
also you will need to instruct the compiler to allow the unsafe code in the Project Settings.
0

## Featured Post

Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.