你好,欢迎来到电脑编程技巧与维护杂志社! 杂志社简介广告服务读者反馈编程社区  
合订本订阅
 
 
您的位置:文章管理 / 本期精品文章
Java通用数据处理技术
 

马玉春

  本文用Java语言设计了一个数据处理的通用类,实现了字节(数组)与16进制字符串、英文字符串与16进制字节(数组)、Unicode编码与字符串等之间的相互转换,以及从ByteBuffer中获取byte数组和16进制字符串的格式化处理。所有方法均经过了严格的测试,并给出了可视化的测试结果。

关键词 16进制,字节,字符串,Unicode编码

一、引言


无论在何种计算机高级语言中,都涉及到字节数据的表示、转换和显示等处理,下表所示就是字节的不同表示方法,“─”表示不可见字符。文献[1]Visual Basic 6.0 实现了数据的表示与转换技术。由于Java具有“一次编译,到处运行”的跨平台特性,因而,有必要对基于Java技术的通用数据处理技术进行研究,达到软件复用的效果。本文用ByteProcess类实现字节(数组)与16进制字符串、英文字符串与16进制字节(数组)、Unicode编码与字符串等之间的相互转换,以及从ByteBuffer中获取byte数组和16进制字符串的格式化处理。

Javastatic修饰的静态方法是属于整个类的,在内存中的代码段将随着类的定义而分配和装载,而引用静态方法,采用对象名或类名均可。由于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方法,将每216进制字符转换为字节,依次存入字节数组即可。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<nLen; 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方法将一个字节转换为216进制字符,然后进行合并,即可得到字节数组对应的16进制字符串。BytesToHexChars方法实现此功能,对应的源代码如下:

 

    public static String BytesToHexChars(byte[] bIn){

        int nLen;

        String strResult = "";

        

        nLen = bIn.length;

       

        for(int i=0; i<nLen; i++){

            strResult += ByteToTwoHexChar(bIn[i]);

        }

       

        return strResult;

    }

 

  推荐精品文章

·2024年6月目录 
·2024年5月目录 
·2024年4月目录 
·2024年3月目录 
·2024年2月目录 
·2024年1月目录
·2023年12月目录
·2023年11月目录
·2023年10月目录
·2023年9月目录 
·2023年8月目录 
·2023年7月目录
·2023年6月目录 
·2023年5月目录

  联系方式
TEL:010-82561037
Fax: 010-82561614
QQ: 100164630
Mail:gaojian@comprg.com.cn

  友情链接
 
Copyright 2001-2010, www.comprg.com.cn, All Rights Reserved
京ICP备14022230号-1,电话/传真:010-82561037 82561614 ,Mail:gaojian@comprg.com.cn
地址:北京市海淀区远大路20号宝蓝大厦E座704,邮编:100089