在Java中字节与十六进制的相互转换主要思想有两点:
1、二进制字节转十六进制时,将字节高位与0xF0做"&"操作,然后再左移4位,得到字节高位的十六进制A;将字节低位与0x0F做"&"操作,得到低位的十六进制B,将两个十六进制数拼装到一块AB就是该字节的十六进制表示。
2、十六进制转二进制字节时,将十六进制字符对应的十进制数字右移动4为,得到字节高位A;将字节低位的十六进制字符对应的十进制数字B与A做"|"运算,即可得到十六进制的二进制字节表示
我测试的Java代码如下:
public class Test01 {
private static String hexStr = "0123456789ABCDEF";
private static String[] binaryArray =
{"0000","0001","0010","0011",
"0100","0101","0110","0111",
"1000","1001","1010","1011",
"1100","1101","1110","1111"};
public static void main(String[] args)
{
String str = "二进制与十六进制互转测试";
System.out.println("源字符串:\n"+str);
String hexString = BinaryToHexString(str.getBytes());
System.out.println("转换为十六进制:\n"+hexString);
System.out.println("转换为二进制:\n"+bytes2BinaryStr(str.getBytes()));
byte [] bArray = HexStringToBinary(hexString);
System.out.println("将str的十六进制文件转换为二进制再转为String:\n"+new String(bArray));
}
/**
*
* @param str
* @return 转换为二进制字符串
*/
public static String bytes2BinaryStr(byte[] bArray){
String outStr = "";
int pos = 0;
for(byte b:bArray){
//高四位
pos = (b&0xF0)>>4;
outStr+=binaryArray[pos];
//低四位
pos=b&0x0F;
outStr+=binaryArray[pos];
}
return outStr;
}
/**
*
* @param bytes
* @return 将二进制转换为十六进制字符输出
*/
public static String BinaryToHexString(byte[] bytes){
String result = "";
String hex = "";
for(int i=0;i<bytes.length;i++){
//字节高4位
hex = String.valueOf(hexStr.charAt((bytes[i]&0xF0)>>4));
//字节低4位
hex += String.valueOf(hexStr.charAt(bytes[i]&0x0F));
result +=hex+" ";
}
return result;
}
/**
*
* @param hexString
* @return 将十六进制转换为字节数组
*/
public static byte[] HexStringToBinary(String hexString){
//hexString的长度对2取整,作为bytes的长度
int len = hexString.length()/2;
byte[] bytes = new byte[len];
byte high = 0;//字节高四位
byte low = 0;//字节低四位
for(int i=0;i<len;i++){
//右移四位得到高位
high = (byte)((hexStr.indexOf(hexString.charAt(2*i)))<<4);
low = (byte)hexStr.indexOf(hexString.charAt(2*i+1));
bytes[i] = (byte) (high|low);//高地位做或运算
}
return bytes;
}
}
运行后的输出结果如下:
源字符串:
二进制与十六进制互转测试
转换为十六进制:
E4BA8CE8BF9BE588B6E4B88EE58D81E585ADE8BF9BE588B6E4BA92E8BDACE6B58BE8AF95
转换为二进制:
11100100 10111010 10001100 11101000 10111111 10011011 11100101 10001000 10110110 11100100 10111000 10001110 11100101 10001101 10000001 11100101 10000101 10101101 11101000 10111111 10011011 11100101 10001000 10110110 11100100 10111010 10010010 11101000 10111101 10101100 11100110 10110101 10001011 11101000 10101111 10010101
将str的十六进制文件转换为二进制并转为String:
二进制与十六进制互转测试
分享到:
相关推荐
最近由于工作上的需要,遇到进制转换的问题。涉及到的进制主要是 十进制,十六进制,二进制中间的转换。还包括了一个字节数组 与十六进制字符串的互相转换。估计遇到蓝牙通信的朋友,应该用的上。
JAVA二进制字节数组字符十六进制BCD编码转换
labview,ASCII码字符串与字节数组的互转,十六进制,例如:字符串BA34转字节数组结果为BA,34
字节集与十六进制高效互转源码 支持反转。也是以前用汇编写的,其实还有更好的写法,只是我懒得改了。效率嘛,至少可以完爆目前所有公开的易语言。源码。特点:支持按字节反转,作用自己体会,可自动处理长度不正确...
java16进制与字符串的转换.pdf
/* java二进制,字节数组,字符,十六进制,BCD编码转换2007-06-07 00:17/** *//** * 把16进制字符串转换成字节数组 * @param hex * @return */
Java进制转换 正整数的十进制转换二进制 将一个十进制数除以二,得到的商再除以二,依此类推直到商等于一或零时为止,倒取除得的余数,即换算为二进制数的结果。只需记住要点:除二取余,倒序排列。 由于计算机...
用于设备通讯之类转化,可供大学,我也测试过OK,可以使用
java 字符串转16进制 16进制转字符串 将两个ASCII字符合成一个字节; java 字符串转16进制 16进制转字符串 将两个ASCII字符合成一个字节; java 字符串转16进制 16进制转字符串 将两个ASCII字符合成一个字节; java ...
易语言十六进制到十进制源码,十六进制到十进制,DLL命令1
本程序主要是将十进制转十六进制函数(包括正负整数及小数),并根据设置显示大小端。 输入参数说明:x表示十进制数,N表示最后转换成的十六进制数的位数(字节数),flag表示大小端(1是小端,2是大端)
易语言字节集到二进制互转源码,字节集到二进制互转,字节集到二进制,二进制到字节集
十六进制的文本文件,转为十六进制格式的二进制文件。 从第一个有效字符开始,每2个有效字符(即0~F)输出一个格式化字节,"0x"、"\r\n"、空格等字符会被跳过。
本程序主要是将十进制转十六进制函数(包括正负整数及小数),并根据设置显示大小端。输入参数说明:x表示十进制数,N表示最后转换成的十六进制数的位数(字节数),flag表示大小端(1是小端,2是大端)
易语言十六进制与字符串转换源码,十六进制与字符串转换,字符串到十六进制线程,十六进制到字符串线程
(1) 根据下述情况,分别编写程序,记录 BX 中 1 的个数(需要考虑 BX 中二进制 串的特殊情况),要求如下: 循环次数已知 循环次数未知 (2) 按照下列要求,编写相应程序段。 1) 起始地址为 string 的主存...
易语言源码易语言字节集到二进制互转源码.rar
用excel表实现的4字节十六进制转浮点数的小工具,打开excel表后需要启用宏才能正常使用。
四字节16进制数与10进制数互相转换