<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
<channel>
<title><![CDATA[Heck's  Blog]]></title> 
<link>https://www.heckjj.com/index.php</link> 
<description><![CDATA[一瞬间的决定，往往可以改变很多，事实上，让自己成功的往往不是知识，是精神！ 如果你总是为自己找借口，那只好让成功推迟。执行力，今天！]]></description> 
<language>zh-cn</language> 
<copyright><![CDATA[Heck's  Blog]]></copyright>
<item>
<link>https://www.heckjj.com/java-code-and-system-convert/</link>
<title><![CDATA[java二进制,字节数组,字符,十六进制,BCD编码转换]]></title> 
<author>Heck &lt;@hecks.tk&gt;</author>
<category><![CDATA[编程杂谈]]></category>
<pubDate>Fri, 15 Oct 2010 07:40:27 +0000</pubDate> 
<guid>https://www.heckjj.com/java-code-and-system-convert/</guid> 
<description>
<![CDATA[ 
	<span style="font-family: 微软雅黑;">java二进制,字节数组,字符,十六进制,BCD编码转换<br/>&nbsp;&nbsp; /* <br/>&nbsp;&nbsp;&nbsp;&nbsp;* 把16进制字符串转换成字节数组<br/>&nbsp;&nbsp;&nbsp;&nbsp;* @param hex<br/>&nbsp;&nbsp;&nbsp;&nbsp;* @return<br/>&nbsp;&nbsp;&nbsp;&nbsp;*/<br/>public static byte[] hexStringToByte(String hex) &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;int len = (hex.length() / 2);<br/>&nbsp;&nbsp;&nbsp;&nbsp;byte[] result = new byte[len];<br/>&nbsp;&nbsp;&nbsp;&nbsp;char[] achar = hex.toCharArray();<br/>&nbsp;&nbsp;&nbsp;&nbsp;for (int i = 0; i &lt; len; i++) &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp; int pos = i * 2;<br/>&nbsp;&nbsp;&nbsp;&nbsp; result[i] = (byte) (toByte(achar[pos]) &lt;&lt; 4 &#124; toByte(achar[pos + 1]));<br/>&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br/>&nbsp;&nbsp;&nbsp;&nbsp;return result;<br/>&#125;<br/><br/>private static byte toByte(char c) &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;byte b = (byte) &quot;0123456789ABCDEF&quot;.indexOf(c);<br/>&nbsp;&nbsp;&nbsp;&nbsp;return b;<br/>&#125;</span><span style="font-family: 微软雅黑;"><br/><br/>/** *//**<br/>&nbsp;&nbsp;&nbsp;&nbsp;* 把字节数组转换成16进制字符串<br/>&nbsp;&nbsp;&nbsp;&nbsp;* @param bArray<br/>&nbsp;&nbsp;&nbsp;&nbsp;* @return<br/>&nbsp;&nbsp;&nbsp;&nbsp;*/<br/>public static final String bytesToHexString(byte[] bArray) &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;StringBuffer sb = new StringBuffer(bArray.length);<br/>&nbsp;&nbsp;&nbsp;&nbsp;String sTemp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;for (int i = 0; i &lt; bArray.length; i++) &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp; sTemp = Integer.toHexString(0xFF &amp; bArray[i]);<br/>&nbsp;&nbsp;&nbsp;&nbsp; if (sTemp.length() &lt; 2)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sb.append(0);<br/>&nbsp;&nbsp;&nbsp;&nbsp; sb.append(sTemp.toUpperCase());<br/>&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br/>&nbsp;&nbsp;&nbsp;&nbsp;return sb.toString();<br/>&#125;<br/><br/>/** *//**<br/>&nbsp;&nbsp;&nbsp;&nbsp;* 把字节数组转换为对象<br/>&nbsp;&nbsp;&nbsp;&nbsp;* @param bytes<br/>&nbsp;&nbsp;&nbsp;&nbsp;* @return<br/>&nbsp;&nbsp;&nbsp;&nbsp;* @throws IOException<br/>&nbsp;&nbsp;&nbsp;&nbsp;* @throws ClassNotFoundException<br/>&nbsp;&nbsp;&nbsp;&nbsp;*/<br/>public static final Object bytesToObject(byte[] bytes) throws IOException, ClassNotFoundException &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;ByteArrayInputStream in = new ByteArrayInputStream(bytes);<br/>&nbsp;&nbsp;&nbsp;&nbsp;ObjectInputStream oi = new ObjectInputStream(in);<br/>&nbsp;&nbsp;&nbsp;&nbsp;Object o = oi.readObject();<br/>&nbsp;&nbsp;&nbsp;&nbsp;oi.close();<br/>&nbsp;&nbsp;&nbsp;&nbsp;return o;<br/>&#125;<br/><br/>/** *//**<br/>&nbsp;&nbsp;&nbsp;&nbsp;* 把可序列化对象转换成字节数组<br/>&nbsp;&nbsp;&nbsp;&nbsp;* @param s<br/>&nbsp;&nbsp;&nbsp;&nbsp;* @return<br/>&nbsp;&nbsp;&nbsp;&nbsp;* @throws IOException<br/>&nbsp;&nbsp;&nbsp;&nbsp;*/<br/>public static final byte[] objectToBytes(Serializable s) throws IOException &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;ByteArrayOutputStream out = new ByteArrayOutputStream();<br/>&nbsp;&nbsp;&nbsp;&nbsp;ObjectOutputStream ot = new ObjectOutputStream(out);<br/>&nbsp;&nbsp;&nbsp;&nbsp;ot.writeObject(s);<br/>&nbsp;&nbsp;&nbsp;&nbsp;ot.flush();<br/>&nbsp;&nbsp;&nbsp;&nbsp;ot.close();<br/>&nbsp;&nbsp;&nbsp;&nbsp;return out.toByteArray();<br/>&#125;<br/><br/>public static final String objectToHexString(Serializable s) throws IOException&#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;return bytesToHexString(objectToBytes(s));<br/>&#125;<br/><br/>public static final Object hexStringToObject(String hex) throws IOException, ClassNotFoundException&#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;return bytesToObject(hexStringToByte(hex));<br/>&#125;<br/><br/>/** *//**<br/>&nbsp;&nbsp;&nbsp;&nbsp;* @函数功能: BCD码转为10进制串(阿拉伯数据)<br/>&nbsp;&nbsp;&nbsp;&nbsp;* @输入参数: BCD码<br/>&nbsp;&nbsp;&nbsp;&nbsp;* @输出结果: 10进制串<br/>&nbsp;&nbsp;&nbsp;&nbsp;*/<br/>public static String bcd2Str(byte[] bytes)&#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;StringBuffer temp=new StringBuffer(bytes.length*2);<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;for(int i=0;i&lt;bytes.length;i++)&#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp; temp.append((byte)((bytes[i]&amp; 0xf0)&gt;&gt;&gt;4));<br/>&nbsp;&nbsp;&nbsp;&nbsp; temp.append((byte)(bytes[i]&amp; 0x0f));<br/>&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br/>&nbsp;&nbsp;&nbsp;&nbsp;return temp.toString().substring(0,1).equalsIgnoreCase(&quot;0&quot;)?temp.toString().substring(1):temp.toString();<br/>&#125;<br/><br/>/** *//**<br/>&nbsp;&nbsp;&nbsp;&nbsp;* @函数功能: 10进制串转为BCD码<br/>&nbsp;&nbsp;&nbsp;&nbsp;* @输入参数: 10进制串<br/>&nbsp;&nbsp;&nbsp;&nbsp;* @输出结果: BCD码<br/>&nbsp;&nbsp;&nbsp;&nbsp;*/<br/>public static byte[] str2Bcd(String asc) &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;int len = asc.length();<br/>&nbsp;&nbsp;&nbsp;&nbsp;int mod = len % 2;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;if (mod != 0) &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp; asc = &quot;0&quot; + asc;<br/>&nbsp;&nbsp;&nbsp;&nbsp; len = asc.length();<br/>&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;byte abt[] = new byte[len];<br/>&nbsp;&nbsp;&nbsp;&nbsp;if (len &gt;= 2) &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp; len = len / 2;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;byte bbt[] = new byte[len];<br/>&nbsp;&nbsp;&nbsp;&nbsp;abt = asc.getBytes();<br/>&nbsp;&nbsp;&nbsp;&nbsp;int j, k;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;for (int p = 0; p &lt; asc.length()/2; p++) &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp; if ( (abt[2 * p] &gt;= &#039;0&#039;) &amp;&amp; (abt[2 * p] &lt;= &#039;9&#039;)) &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;j = abt[2 * p] - &#039;0&#039;;<br/>&nbsp;&nbsp;&nbsp;&nbsp; &#125; else if ( (abt[2 * p] &gt;= &#039;a&#039;) &amp;&amp; (abt[2 * p] &lt;= &#039;z&#039;)) &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;j = abt[2 * p] - &#039;a&#039; + 0x0a;<br/>&nbsp;&nbsp;&nbsp;&nbsp; &#125; else &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;j = abt[2 * p] - &#039;A&#039; + 0x0a;<br/>&nbsp;&nbsp;&nbsp;&nbsp; &#125;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp; if ( (abt[2 * p + 1] &gt;= &#039;0&#039;) &amp;&amp; (abt[2 * p + 1] &lt;= &#039;9&#039;)) &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;k = abt[2 * p + 1] - &#039;0&#039;;<br/>&nbsp;&nbsp;&nbsp;&nbsp; &#125; else if ( (abt[2 * p + 1] &gt;= &#039;a&#039;) &amp;&amp; (abt[2 * p + 1] &lt;= &#039;z&#039;)) &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;k = abt[2 * p + 1] - &#039;a&#039; + 0x0a;<br/>&nbsp;&nbsp;&nbsp;&nbsp; &#125;else &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;k = abt[2 * p + 1] - &#039;A&#039; + 0x0a;<br/>&nbsp;&nbsp;&nbsp;&nbsp; &#125;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp; int a = (j &lt;&lt; 4) + k;<br/>&nbsp;&nbsp;&nbsp;&nbsp; byte b = (byte) a;<br/>&nbsp;&nbsp;&nbsp;&nbsp; bbt[p] = b;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br/>&nbsp;&nbsp;&nbsp;&nbsp;return bbt;<br/>&#125;<br/>/** *//**<br/>&nbsp;&nbsp;&nbsp;&nbsp;* @函数功能: BCD码转ASC码<br/>&nbsp;&nbsp;&nbsp;&nbsp;* @输入参数: BCD串<br/>&nbsp;&nbsp;&nbsp;&nbsp;* @输出结果: ASC码<br/>&nbsp;&nbsp;&nbsp;&nbsp;*/<br/>public static String BCD2ASC(byte[] bytes) &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;StringBuffer temp = new StringBuffer(bytes.length * 2);<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;for (int i = 0; i &lt; bytes.length; i++) &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp; int h = ((bytes[i] &amp; 0xf0) &gt;&gt;&gt; 4);<br/>&nbsp;&nbsp;&nbsp;&nbsp; int l = (bytes[i] &amp; 0x0f);&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp;&nbsp; temp.append(BToA[h]).append( BToA[l]);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br/>&nbsp;&nbsp;&nbsp;&nbsp;return temp.toString() ;<br/>&#125;<br/><br/>/** *//**<br/>&nbsp;&nbsp;&nbsp;&nbsp;* MD5加密字符串，返回加密后的16进制字符串<br/>&nbsp;&nbsp;&nbsp;&nbsp;* @param origin<br/>&nbsp;&nbsp;&nbsp;&nbsp;* @return<br/>&nbsp;&nbsp;&nbsp;&nbsp;*/<br/>public static String MD5EncodeToHex(String origin) &#123; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return bytesToHexString(MD5Encode(origin));<br/>&nbsp;&nbsp;&nbsp;&nbsp; &#125;<br/><br/>/** *//**<br/>&nbsp;&nbsp;&nbsp;&nbsp;* MD5加密字符串，返回加密后的字节数组<br/>&nbsp;&nbsp;&nbsp;&nbsp;* @param origin<br/>&nbsp;&nbsp;&nbsp;&nbsp;* @return<br/>&nbsp;&nbsp;&nbsp;&nbsp;*/<br/>public static byte[] MD5Encode(String origin)&#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;return MD5Encode(origin.getBytes());<br/>&#125;<br/><br/>/** *//**<br/>&nbsp;&nbsp;&nbsp;&nbsp;* MD5加密字节数组，返回加密后的字节数组<br/>&nbsp;&nbsp;&nbsp;&nbsp;* @param bytes<br/>&nbsp;&nbsp;&nbsp;&nbsp;* @return<br/>&nbsp;&nbsp;&nbsp;&nbsp;*/<br/>public static byte[] MD5Encode(byte[] bytes)&#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;MessageDigest md=null;<br/>&nbsp;&nbsp;&nbsp;&nbsp;try &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp; md = MessageDigest.getInstance(&quot;MD5&quot;);<br/>&nbsp;&nbsp;&nbsp;&nbsp; return md.digest(bytes);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&#125; catch (NoSuchAlgorithmException e) &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp; e.printStackTrace();<br/>&nbsp;&nbsp;&nbsp;&nbsp; return new byte[0];<br/>&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br/><br/>&#125;<br/>//关于byte:&nbsp;&nbsp;&nbsp;&nbsp;signed byte 把 0x00 ~ 0xff 映射成范围 0~127和 -128~-1&nbsp;&nbsp;&nbsp;&nbsp;两段,比较简单的办法用 (b+256)%256的办法令其值回到0~255，或者用&amp;0xff并赋给一个int。</span><br/>Tags - <a href="https://www.heckjj.com/tags/java%25E4%25BA%258C%25E8%25BF%259B%25E5%2588%25B6/" rel="tag">java二进制</a> , <a href="https://www.heckjj.com/tags/%25E5%25AD%2597%25E8%258A%2582%25E6%2595%25B0%25E7%25BB%2584/" rel="tag">字节数组</a> , <a href="https://www.heckjj.com/tags/%25E5%25AD%2597%25E7%25AC%25A6/" rel="tag">字符</a> , <a href="https://www.heckjj.com/tags/%25E5%258D%2581%25E5%2585%25AD%25E8%25BF%259B%25E5%2588%25B6/" rel="tag">十六进制</a> , <a href="https://www.heckjj.com/tags/bcd%25E7%25BC%2596%25E7%25A0%2581%25E8%25BD%25AC%25E6%258D%25A2/" rel="tag">bcd编码转换</a>
]]>
</description>
</item><item>
<link>https://www.heckjj.com/java-code-and-system-convert/#blogcomment</link>
<title><![CDATA[[评论] java二进制,字节数组,字符,十六进制,BCD编码转换]]></title> 
<author> &lt;user@domain.com&gt;</author>
<category><![CDATA[评论]]></category>
<pubDate>Thu, 01 Jan 1970 00:00:00 +0000</pubDate> 
<guid>https://www.heckjj.com/java-code-and-system-convert/#blogcomment</guid> 
<description>
<![CDATA[ 
	
]]>
</description>
</item>
</channel>
</rss>