文辉居士

Java通用数据处理技术

摘 要 本文用Java语言设计了一个数据处理的通用类,实现了字节(数组)与16进制字符串、英文字符串与16进制字节(数组)、Unicode编码与字符串等之间的相互转换,以及从ByteBuffer中获取byte数组和16进制字符串的格式化处理。所有方法均经过了严格的测试,并给出了可视化的测试结果。 
关键词 16进制,字节,字符串,Unicode编码 
一、引言 
无论在何种计算机高级语言中,都涉及到字节数据的表示、转换和显示等处理,下表所示就是字节的不同表示方法,“─”表示不可见字符。文献[1]用Visual Basic 6.0 实现了数据的表示与转换技术。由于Java具有“一次编译,到处运行”的跨平台特性,因而,有必要对基于Java技术的通用数据处理技术进行研究,达到软件复用的效果。本文用ByteProcess类实现字节(数组)与16进制字符串、英文字符串与16进制字节(数组)、Unicode编码与字符串等之间的相互转换,以及从ByteBuffer中获取byte数组和16进制字符串的格式化处理。 
Java中static修饰的静态方法是属于整个类的,在内存中的代码段将随着类的定义而分配和装载,而引用静态方法,采用对象名或类名均可。由于static方法只能访问static方法或数据成员,但是,非static方法可以访问static和非static方法和数据成员[2]。为了在不生成对象的情况下就可以直接使用ByteProcess类中的方法,并且,使其可以被static方法和非static方法访问,将ByteProcess中的所有方法都设置为static方法。如下定义的16进制字符串的集合用于将16进制字符转换为对应的数值: 
static private final String CharSet = "0123456789ABCDEF"; 

二、16进制字符串转换为字节(数组) 
要将16进制字符串转换为字节,首先需要将16进制字符,即"0-9"与"A-F"转换为对应的数值。HexCharToNum方法实现该功能,例如将"A"转换为整数10、"9"转换为整数9等。在转换前,首先需要将输入参数利用toUpperCase方法转换为大写,然后求出在16进制字符串集合CharSet中的索引位置即为对应的数值。HexCharToNum的源代码如下: 

public static int HexCharToNum(String ch){ 
ch = ch.toUpperCase(); 
return CharSet.indexOf(ch); 


对于两个16进制字符转换为字节,首先通过substring方法取得对应的字符,然后利用HexCharToNum方法转换为对应的数值,高位乘以16加上低位就可以得到结果。TwoHexCharsToByte方法的源代码如下: 

public static byte TwoHexCharsToByte(String chs){ 
int i,j; 

chs = chs.toUpperCase(); 
if (chs.length() < 2) return -1; 
i = HexCharToNum(chs.substring(0,1)); 
j = HexCharToNum(chs.substring(1,2)); 

return (byte)(i*16+j); 


对于16进制字符串转换为字节数组,首先,将输入参数的字符长度除以2作为字节数组的长度,构建数组后,通过TwoHexCharsToByte方法,将每2个16进制字符转换为字节,依次存入字节数组即可。HexCharsToBytes的源代码如下: 

public static byte[] HexCharsToBytes(String chs){ 
int i, nLen; 
byte bTmp; 

nLen = (chs.length())/2; 
byte[] bResult = new byte[nLen]; 

for (i=0; i bTmp = TwoHexCharsToByte(chs.substring(i*2,(i+1)*2)); 
bResult[i] = bTmp; 


return bResult; 


三、字节(数组)转换为16进制字符串 
ByteToTwoHexChar方法实现字节到16进制字符串的转换,例如,将字节0x3d转换为"3D"。首先,将字节右移4位与0xf相与,得到字节的高4位值,然后,利用substring方法,取得16进制字符串CharSet中对应的一个字符。以此方法,获取低4位对应的字符,然后,再将两个字符合并,即可得到字节对应的16进制字符串。ByteToTwoHexChar方法对应的源代码如下:

public static String ByteToTwoHexChar(byte bIn) { 
int i, j; 

String strResult = ""; 
i = ((int)bIn >> 4 & 0xf); 
strResult += CharSet.substring(i, i+1); 

j = (int)bIn & 0xf; 
strResult += CharSet.substring(j, j+1); 

return strResult; 



将字节数组转换为16进制字符串,可以方便地显示不可见字符所对应的字节。首先,取得字节的长度,然后,通过循环,利用ByteToTwoHexChar方法将一个字节转换为2个16进制字符,然后进行合并,即可得到字节数组对应的16进制字符串。BytesToHexChars方法实现此功能,对应的源代码如下: 

public static String BytesToHexChars(byte[] bIn){ 
int nLen; 
String strResult = ""; 

nLen = bIn.length; 

for(int i=0; i strResult += ByteToTwoHexChar(bIn[i]); 


return strResult; 
}

 

posted on 2012-12-24 14:25  restService  阅读(337)  评论(0编辑  收藏  举报

导航


我是有底线的赠送场