<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DZone Snippets: shift code</title>
    <link>http://snippets.dzone.com/posts</link>
    <pubDate>Thu, 28 Aug 2008 21:02:14 GMT</pubDate>
    <description>DZone Snippets: shift code</description>
    <item>
      <title>Convert a long to HEX value and the other way around</title>
      <link>http://snippets.dzone.com/posts/show/4593</link>
      <description>Handy to convert MD5 or SHA-1 hash values.&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;	public static long hexToLong(byte[] bytes) {&lt;br /&gt;&lt;br /&gt;		if (bytes.length &gt; 16) {&lt;br /&gt;			throw new IllegalArgumentException("Byte array too long (max 16 elements)");&lt;br /&gt;		}&lt;br /&gt;		long v = 0;&lt;br /&gt;		for (int i = 0; i &lt; bytes.length; i += 2) {&lt;br /&gt;			byte b1 = (byte) (bytes[i] &amp; 0xFF);&lt;br /&gt;&lt;br /&gt;			b1 -= 48;&lt;br /&gt;			if (b1 &gt; 9) b1 -= 39;&lt;br /&gt;&lt;br /&gt;			if (b1 &lt; 0 || b1 &gt; 15) {&lt;br /&gt;				throw new IllegalArgumentException("Illegal hex value: " + bytes[i]);&lt;br /&gt;			}&lt;br /&gt;&lt;br /&gt;			b1 &lt;&lt;=4;&lt;br /&gt;&lt;br /&gt;			byte b2 = (byte) (bytes[i + 1] &amp; 0xFF);&lt;br /&gt;			b2 -= 48;&lt;br /&gt;			if (b2 &gt; 9) b2 -= 39;&lt;br /&gt;&lt;br /&gt;			if (b2 &lt; 0 || b2 &gt; 15) {&lt;br /&gt;				throw new IllegalArgumentException("Illegal hex value: " + bytes[i + 1]);&lt;br /&gt;			}&lt;br /&gt;&lt;br /&gt;			v |= (((b1 &amp; 0xF0) | (b2 &amp; 0x0F))) &amp; 0x00000000000000FFL ;&lt;br /&gt;&lt;br /&gt;			if (i + 2 &lt; bytes.length) v &lt;&lt;= 8;&lt;br /&gt;		}&lt;br /&gt;&lt;br /&gt;		return v;&lt;br /&gt;	}&lt;br /&gt;&lt;br /&gt;	public static byte[] longToHex(final long l) {&lt;br /&gt;		long v = l &amp; 0xFFFFFFFFFFFFFFFFL;&lt;br /&gt;&lt;br /&gt;		byte[] result = new byte[16];&lt;br /&gt;		Arrays.fill(result, 0, result.length, (byte)0);&lt;br /&gt;&lt;br /&gt;		for (int i = 0; i &lt; result.length; i += 2) {&lt;br /&gt;			byte b = (byte) ((v &amp; 0xFF00000000000000L) &gt;&gt; 56);&lt;br /&gt;&lt;br /&gt;			byte b2 = (byte) (b &amp; 0x0F);&lt;br /&gt;			byte b1 = (byte) ((b &gt;&gt; 4) &amp; 0x0F);&lt;br /&gt;&lt;br /&gt;			if (b1 &gt; 9) b1 += 39;&lt;br /&gt;			b1 += 48;&lt;br /&gt;&lt;br /&gt;			if (b2 &gt; 9) b2 += 39;&lt;br /&gt;			b2 += 48;&lt;br /&gt;&lt;br /&gt;			result[i] = (byte) (b1 &amp; 0xFF);&lt;br /&gt;			result[i + 1] = (byte) (b2 &amp; 0xFF);&lt;br /&gt;&lt;br /&gt;			v &lt;&lt;= 8;&lt;br /&gt;		}&lt;br /&gt;&lt;br /&gt;		return result;&lt;br /&gt;	}&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;And tests:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;	public void testHexToLong() throws Exception {&lt;br /&gt;		assertEquals(-7057002501900618110L, NumberUtils.hexToLong("9e107d9d372bb682".getBytes()));&lt;br /&gt;		assertEquals(-10908158098650842L, NumberUtils.hexToLong("ffd93f1687604926".getBytes()));&lt;br /&gt;	}&lt;br /&gt;&lt;br /&gt;	public void testLongToHex() throws Exception {&lt;br /&gt;		assertEquals("9e107d9d372bb682", new String(NumberUtils.longToHex(-7057002501900618110L)));&lt;br /&gt;		assertEquals("ffd93f1687604926", new String(NumberUtils.longToHex(-10908158098650842L)));&lt;br /&gt;	}&lt;br /&gt;&lt;/code&gt;</description>
      <pubDate>Sun, 30 Sep 2007 23:30:01 GMT</pubDate>
      <guid>http://snippets.dzone.com/posts/show/4593</guid>
      <author>devijvers (Steven Devijver)</author>
    </item>
  </channel>
</rss>
