`
kerlubasola
  • 浏览: 679778 次
文章分类
社区版块
存档分类
最新评论

Java的16进制与字符串的相互转换函数

 
阅读更多
/**
* 将指定byte数组以16进制的形式打印到控制台
* @param hint String
* @param b byte[]
* @return void
*/
public static void printHexString(String hint, byte[] b) {
System.out.print(hint);
for (int i = 0; i < b.length; i++) {
String hex = Integer.toHexString(b[i] & 0xFF);
if (hex.length() == 1) {
hex = '0' + hex;
}
System.out.print(hex.toUpperCase() + " ");
}
System.out.println("");
}
/**
*
* @param b byte[]
* @return String
*/
public static String Bytes2HexString(byte[] b) {
String ret = "";
for (int i = 0; i < b.length; i++) {
String hex = Integer.toHexString(b[i] & 0xFF);
if (hex.length() == 1) {
hex = '0' + hex;
}
ret += hex.toUpperCase();
}
return ret;
}
/**
* 将两个ASCII字符合成一个字节;
* 如:"EF"--> 0xEF
* @param src0 byte
* @param src1 byte
* @return byte
*/
public static byte uniteBytes(byte src0, byte src1) {
byte _b0 = Byte.decode("0x" + new String(new byte[]{src0})).byteValue();
_b0 = (byte)(_b0 << 4);
byte _b1 = Byte.decode("0x" + new String(new byte[]{src1})).byteValue();
byte ret = (byte)(_b0 ^ _b1);
return ret;
}
/**
* 将指定字符串src,以每两个字符分割转换为16进制形式
* 如:"2B44EFD9" --> byte[]{0x2B, 0x44, 0xEF, 0xD9}
* @param src String
* @return byte[]
*/
public static byte[] HexString2Bytes(String src){
byte[] ret = new byte[8];
byte[] tmp = src.getBytes();
for(int i=0; i<8; i++){
ret[i] = uniteBytes(tmp[i*2], tmp[i*2+1]);
}
return ret;

}



-------------------------------------------------------------------------------------------------------------

public static String stringToHexString(String strPart) {
<wbr><wbr><wbr><wbr><wbr><wbr><wbr> String hexString = "";<br><wbr><wbr><wbr><wbr><wbr><wbr><wbr> for (int i = 0; i &lt; strPart.length(); i++) {<br><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr> int ch = (int) strPart.charAt(i);<br><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr> String strHex = Integer.toHexString(ch);<br><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr> hexString = hexString + strHex;<br><wbr><wbr><wbr><wbr><wbr><wbr><wbr> }<br><wbr><wbr><wbr><wbr><wbr><wbr><wbr> return hexString;<br><wbr><wbr><wbr> }<br><br> private static String hexString="0123456789ABCDEF";<br><br> public static String encode(String str)<br> {<br> // 根据默认编码获取字节数组<br> byte[] bytes=str.getBytes();<br> StringBuilder sb=new StringBuilder(bytes.length*2);<br> // 将字节数组中每个字节拆解成2位16进制整数<br> for(int i=0;i&lt;bytes.length;i++)<br> {<br> sb.append(hexString.charAt((bytes[i]&amp;0xf0)&gt;&gt;4));<br> sb.append(hexString.charAt((bytes[i]&amp;0x0f)&gt;&gt;0));<br> }<br> return sb.toString();<br> }</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>


public static String decode(String bytes)
{
ByteArrayOutputStream baos=new ByteArrayOutputStream(bytes.length()/2);
// 将每2位16进制整数组装成一个字节
for(int i=0;i<bytes.length();i+=2)
baos.write((hexString.indexOf(bytes.charAt(i))<<4 |hexString.indexOf(bytes.charAt(i+1))));
return new String(baos.toByteArray());
}

private static byte uniteBytes(byte src0, byte src1) {
<wbr><wbr><wbr><wbr> byte _b0 = Byte.decode("0x" + new String(new byte[] {src0})).byteValue();<br><wbr><wbr><wbr><wbr> _b0 = (byte) (_b0 &lt;&lt; 4);<br><wbr><wbr><wbr><wbr> byte _b1 = Byte.decode("0x" + new String(new byte[] {src1})).byteValue();<br><wbr><wbr><wbr><wbr> byte ret = (byte) (_b0 | _b1);<br><wbr><wbr><wbr><wbr> return ret;<br><br> public static byte[] HexString2Bytes(String src)<br> {<br><wbr><wbr> byte[] ret = new byte[6];<br><wbr><wbr> byte[] tmp = src.getBytes();<br><wbr><wbr> for(int i=0; i&lt;6; ++i )<br><wbr><wbr> {<br><wbr><wbr><wbr> ret[i] = uniteBytes(tmp[i*2], tmp[i*2+1]);<br><wbr><wbr><wbr><wbr><wbr> }<br><wbr><wbr> return ret;<br> }</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>

<wbr></wbr>

<wbr>====================================================================</wbr>

java 格式化输出十六进制数

<wbr><wbr><wbr>// 以16进制输出文件内容, 每16个数换行一次<br><wbr><wbr><wbr>for(int i = 0; i &lt; nLen; i++)<br><wbr><wbr><wbr>{<br><wbr><wbr><wbr><wbr>if(i % 16 == 0)<br><wbr><wbr><wbr><wbr><wbr>System.out.println();<br><wbr><wbr><wbr><wbr>String strHex = new String();<br><wbr><wbr><wbr><wbr>strHex = Integer.toHexString(chBuf[i]).toUpperCase();<br><wbr><wbr><wbr><wbr>if(strHex.length() &gt; 3)<br><wbr><wbr><wbr><wbr><wbr>System.out.print(strHex.substring(6));<br><wbr><wbr><wbr><wbr>else<br><wbr><wbr><wbr><wbr><wbr>if(strHex.length() &lt; 2)<br><wbr><wbr><wbr><wbr><wbr><wbr>System.out.print("0" + strHex);<br><wbr><wbr><wbr><wbr><wbr>else<br><wbr><wbr><wbr><wbr><wbr><wbr>System.out.print(strHex);<br><wbr><wbr><wbr><wbr><br><wbr><wbr><wbr><wbr>System.out.print(" ");<br><wbr><wbr><wbr>}</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>
<wbr></wbr>
输出结果
-----------------------------------------------------------------------
FF D8 FF E0 00 10 4A 46 49 46 00 01 01 00 00 01
00 01 00 00 FF E1 00 E6 45 78 69 66 00 00 49 49
2A 00 08 00 00 00 05 00 12 01 03 00 01 00 00 00
01 00 00 00 31 01 02 00 1C 00 00 00 4A 00 00 00
32 01 02 00 14 00 00 00 66 00 00 00 13 02 03 00
01 00 00 00 01 00 00 00 69 87 04 00 01 00 00 00
7A 00 00 00
<wbr></wbr>
=================================
当我们把string字符串转成byte[]后,要再转成string 通过String.valueof()是实现不了的,只能new string(byte [])。
呵呵,我在使用java<wbr>3des数据加密的时候,byte转string,存到文件,再取出string再转byte还是不对的,所以new<wbr>string(byte<wbr>[])也不见得会得到正确结果的!!最后我是采用byte转成16进制字符串,然后再将16进制字符串转换成byte才可以的.</wbr></wbr></wbr>

分享到:
评论

相关推荐

    16进制字符串转换DWORDToHexString

    想“把数值转换成16进制字符串”,比如0x00000123转换成字符串"00000123",虽然有函数_itoa可以调用,但是返回结果是"123",用sprintf又不甘心,就自己动手写一个函数DWORDToHexString,附带的HexStringToValue有误...

    通过java编程得到.jpg图片16进制的数据

    通过java中IO流实现对.jpg与最后16进制的读取与写入,中间在利用Integer.toHexString()函数将字节数据转出16进制的数以便于观察。具体实现可将附件.java文件

    Java进制/时间/日期/字符串/流算法大全

    Java 的16 进制与字符串的相互转换函数 JAVA 时间格式化处理 将毫秒转化为日期 文本的倒序输出 判断一个数字是奇数还是偶数 用Hibernate 实现分页 35 选7 彩票程序 获取GMT8 时间 中文乱码转换 Big5 字与Unicode 的...

    Android字符串和十六进制相互转化出现的中文乱码问题

    废话不读说了,直接给大家贴代码了,代码附有注释,可以说明一切,本文写的不好,还请见谅。 import java.io.ByteArrayOutputStream; /** * Created by Administrator on 2016/2/2. ...* 将字符串编码成16进制数

    matlab十六进制转十进制代码-char2hex-hex2char:将十进制整数字符串转换为十六进制表示形式并在Matlab中返回

    将十进制整数字符串转换为十六进制表示形式,然后再返回到Matlab中。 版本1.2,2016年4月21日 下载资料库: 返回一个二维字符串数组,其中每行是S行中每个十进制整数字符串的十六进制表示形式。 S必须是仅包含十进制...

    java 算法大全 java

    java 算法大全 java16进制与字符串的相互转换函数

    java字符串操作大全

    java字符串操作大全,适合初学者,浅显易懂 部JAVA字符串操作 2008-07-11 15:39:42| 分类: JAVA | 标签: |字号大中小 订阅 . JAVA字符串的方法 String a = "53c015"; //Integer.parseInt(s, radix) radix设置为...

    java版的算法大全

    Java的16进制与字符串的相互转换函数 JAVA时间格式化处理 将毫秒转化为日期 文本的倒序输出 判断一个数字是奇数还是偶数 35选7彩票程序 中文乱码转换

    java 算法

    内容包括:Java的16进制与字符串的相互转换函数 JAVA时间格式化处理 ,将毫秒转化为日期, 文本的倒序输出 ,判断一个数字是奇数还是偶数 ,用Hibernate实现分页, 35选7彩票程序 ,获取GMT8时间, 中文乱码转换 ,...

    java.rar_Java编程_Java_

    详细介绍java的16进制与字符串的转换函数,java时间格式化处理。

    hive函数大全(中文版)

    16. 空格字符串函数:space 27 17. 重复字符串函数:repeat 27 18. 首字符ascii函数:ascii 28 19. 左补足函数:lpad 28 20. 右补足函数:rpad 28 21. 分割字符串函数: split 28 22. 集合查找函数: find_in_set 29 ...

    文章目录 一、javaScript 的几种数据类型 1、数字类型 2、字符串 3、布尔型 4、数组 5、null 和 undef

    4、布尔型与其他类型的相互转换 5、隐式转换 一、javaScript 的几种数据类型 JavaScript 的数据类型有数字、字符串、布尔型、对象类型、数组、null 和 undefined。 1、数字类型 JavaScript 中的数字类型指整数和...

    javascript常见数字进制转换实例分析

    这其中关于16进制的一个函数也很特别,escape函数可以将一个字符串转化成16进制的数字。 下面是一个综合的例子: var a = escape(code); //code是个十六进制形式的字符串,a就是一个十六进制数 var b = pars

    javascript parseInt() 函数的进制转换注意细节

    该函数要求第一个参数是字符串,如果不是字符串将被转换成字符串,而且,在进行转换之前,字符串参数的左侧符合进制数所使用字符集的字符被截取出来用于进制数的转换。 字符串参数开头和结尾的空格会

    Android开发人员不得不收集的代码

    字符串相关→StringUtils.java→Test 判断字符串是否为null或长度为0 isEmpty 判断字符串是否为null或全为空格 isSpace null转为长度为0的字符串 null2Length0 返回字符串长度 length 首字母大写 upperFirstLetter ...

    java源码包---java 源码 大量 实例

     设定字符串为“张三,你好,我是李四”  产生张三的密钥对(keyPairZhang)  张三生成公钥(publicKeyZhang)并发送给李四,这里发送的是公钥的数组字节  通过网络或磁盘等方式,把公钥编码传送给李四,李四接收到...

    Java面试-对象,异常等.doc

    编写一个函数将一个十六进制数的字符串参数转换成整数返回。 String str = “13abf”; int len = str.length; int sum = 0; for(int i=0;i;i++){ char c = str.charAt(len-1-i); int n = Character.digit(c,...

    JAVA上百实例源码以及开源项目源代码

     设定字符串为“张三,你好,我是李四”  产生张三的密钥对(keyPairZhang)  张三生成公钥(publicKeyZhang)并发送给李四,这里发送的是公钥的数组字节  通过网络或磁盘等方式,把公钥编码传送给李四,李四接收到...

    python基础学习day04.txt

    三引号字符串可以隐式换行,换行会自动转换为'\n' 转义序列 \n \t \\ \' \" \xXX \uXXXX 编码: ASCII (128个) UNICODE16(65536个) / UNICODE32 raw 字符串 r'' r"" r'''''' r"""""" r字符串的\不作为...

    JAVA上百实例源码以及开源项目

     设定字符串为“张三,你好,我是李四”  产生张三的密钥对(keyPairZhang)  张三生成公钥(publicKeyZhang)并发送给李四,这里发送的是公钥的数组字节  通过网络或磁盘等方式,把公钥编码传送给李四,李四接收到...

Global site tag (gtag.js) - Google Analytics