<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://weblogs.asp.net/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Craig Gemmill&amp;#39;s Blog : Conversion</title><link>http://weblogs.asp.net/craigg/archive/tags/Conversion/default.aspx</link><description>Tags: Conversion</description><dc:language>en</dc:language><generator>CommunityServer 2007 SP1 (Build: 20510.895)</generator><item><title>VB.NET Hexadecimal to Floating Point / Single (IEEE 754)</title><link>http://weblogs.asp.net/craigg/archive/2006/09/25/Hexadecimal-to-Floating-Point-_2800_IEEE-754_2900_.aspx</link><pubDate>Mon, 25 Sep 2006 05:35:00 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:580006</guid><dc:creator>CraigG</dc:creator><author>CraigG</author><slash:comments>17</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://weblogs.asp.net/craigg/rsscomments.aspx?PostID=580006</wfw:commentRss><comments>http://weblogs.asp.net/craigg/archive/2006/09/25/Hexadecimal-to-Floating-Point-_2800_IEEE-754_2900_.aspx#comments</comments><description>&lt;p&gt;A post just came across the forum I frequent regarding Hexadecimal to Floating Point conversion. Strangely there appears to be no direct way to do this in .NET, and the solutions I found were pretty lame and tedious&amp;hellip; so it became my mission to get it done the .NET way, and here is the result:&lt;br /&gt;&lt;/p&gt;&lt;p style="margin: 0in 0in 0pt" class="MsoNormal"&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New'"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue"&gt;Private&lt;/span&gt; &lt;span style="color: blue"&gt;Function&lt;/span&gt; ConvertHexToSingle(&lt;span style="color: blue"&gt;ByVal&lt;/span&gt; hexValue &lt;span style="color: blue"&gt;As&lt;/span&gt; &lt;span style="color: blue"&gt;String&lt;/span&gt;) &lt;span style="color: blue"&gt;As&lt;/span&gt; &lt;span style="color: blue"&gt;Single&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="margin: 0in 0in 0pt" class="MsoNormal"&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New'"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue"&gt;Try&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="margin: 0in 0in 0pt" class="MsoNormal"&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New'"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue"&gt;Dim&lt;/span&gt; iInputIndex &lt;span style="color: blue"&gt;As&lt;/span&gt; &lt;span style="color: blue"&gt;Integer&lt;/span&gt; = 0&lt;/span&gt;&lt;/p&gt;&lt;p style="margin: 0in 0in 0pt" class="MsoNormal"&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New'"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue"&gt;Dim&lt;/span&gt; iOutputIndex &lt;span style="color: blue"&gt;As&lt;/span&gt; &lt;span style="color: blue"&gt;Integer&lt;/span&gt; = 0&lt;/span&gt;&lt;/p&gt;&lt;p style="margin: 0in 0in 0pt" class="MsoNormal"&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New'"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue"&gt;Dim&lt;/span&gt; bArray(3) &lt;span style="color: blue"&gt;As&lt;/span&gt; &lt;span style="color: blue"&gt;Byte&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="margin: 0in 0in 0pt" class="MsoNormal"&gt;&amp;nbsp;&lt;/p&gt;&lt;p style="margin: 0in 0in 0pt" class="MsoNormal"&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New'"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue"&gt;For&lt;/span&gt; iInputIndex = 0 &lt;span style="color: blue"&gt;To&lt;/span&gt; hexValue.Length - 1 &lt;span style="color: blue"&gt;Step&lt;/span&gt; 2&lt;/span&gt;&lt;/p&gt;&lt;p style="margin: 0in 0in 0pt" class="MsoNormal"&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New'"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;bArray(iOutputIndex) = &lt;span style="color: blue"&gt;Byte&lt;/span&gt;.Parse(hexValue.Chars(iInputIndex) &amp;amp; hexValue.Chars(iInputIndex + 1), Globalization.NumberStyles.HexNumber)&lt;/span&gt;&lt;/p&gt;&lt;p style="margin: 0in 0in 0pt" class="MsoNormal"&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New'"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;iOutputIndex += 1&lt;/span&gt;&lt;/p&gt;&lt;p style="margin: 0in 0in 0pt" class="MsoNormal"&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New'"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue"&gt;Next&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="margin: 0in 0in 0pt" class="MsoNormal"&gt;&amp;nbsp;&lt;/p&gt;&lt;p style="margin: 0in 0in 0pt" class="MsoNormal"&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New'"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;Array.Reverse(bArray)&lt;/span&gt;&lt;/p&gt;&lt;p style="margin: 0in 0in 0pt" class="MsoNormal"&gt;&amp;nbsp;&lt;/p&gt;&lt;p style="margin: 0in 0in 0pt" class="MsoNormal"&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New'"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue"&gt;Return&lt;/span&gt; BitConverter.ToSingle(bArray, 0)&lt;/span&gt;&lt;/p&gt;&lt;p style="margin: 0in 0in 0pt" class="MsoNormal"&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New'"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue"&gt;Catch&lt;/span&gt; ex &lt;span style="color: blue"&gt;As&lt;/span&gt; Exception&lt;/span&gt;&lt;/p&gt;&lt;p style="margin: 0in 0in 0pt" class="MsoNormal"&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New'"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue"&gt;Throw&lt;/span&gt; &lt;span style="color: blue"&gt;New&lt;/span&gt; FormatException(&lt;span style="color: maroon"&gt;&amp;quot;The supplied hex value is either empty or in an incorrect format. Use the following format: 00000000&amp;quot;&lt;/span&gt;, ex)&lt;/span&gt;&lt;/p&gt;&lt;p style="margin: 0in 0in 0pt" class="MsoNormal"&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New'"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue"&gt;End&lt;/span&gt; &lt;span style="color: blue"&gt;Try&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="margin: 0in 0in 0pt" class="MsoNormal"&gt;&amp;nbsp;&lt;/p&gt;&lt;p style="margin: 0in 0in 0pt" class="MsoNormal"&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New'"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue"&gt;End&lt;/span&gt; &lt;span style="color: blue"&gt;Function&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="margin: 0in 0in 0pt" class="MsoNormal"&gt;&amp;nbsp;&lt;/p&gt;&lt;p style="margin: 0in 0in 0pt" class="MsoNormal"&gt;&amp;nbsp;&lt;/p&gt;&lt;p style="margin: 0in 0in 0pt" class="MsoNormal"&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New'"&gt;&lt;span style="color: blue"&gt;&lt;font color="#000000"&gt;ConvertHexToSingle(&amp;quot;3C000000&amp;quot;)&lt;/font&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;Even though this is just a rough example, it does work, and it can be expanded to support larger types (such as Double) with a couple of small mods. &lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=580006" width="1" height="1"&gt;</description><category domain="http://weblogs.asp.net/craigg/archive/tags/.NET/default.aspx">.NET</category><category domain="http://weblogs.asp.net/craigg/archive/tags/Conversion/default.aspx">Conversion</category><category domain="http://weblogs.asp.net/craigg/archive/tags/Double/default.aspx">Double</category><category domain="http://weblogs.asp.net/craigg/archive/tags/Hex/default.aspx">Hex</category><category domain="http://weblogs.asp.net/craigg/archive/tags/Hexadecimal/default.aspx">Hexadecimal</category><category domain="http://weblogs.asp.net/craigg/archive/tags/Single/default.aspx">Single</category><category domain="http://weblogs.asp.net/craigg/archive/tags/VB.NET/default.aspx">VB.NET</category><category domain="http://weblogs.asp.net/craigg/archive/tags/Visual+Basic/default.aspx">Visual Basic</category></item></channel></rss>