日期:2014-05-20  浏览次数:20698 次

java解码十六进制ascii码,有代码,求改正

public static String DecodeASCII(String ascii){
ArrayList<Byte> buffer =new ArrayList<Byte>();
    for (int i = 0; i < ascii.length(); i += 2)
    {
        String temp = ascii.substring(i, 2);
        byte value = Convert.ToByte(temp, 16);
        buffer.add(value);
    }
   String str =  System.Text.Encoding.ASCII.GetString(buffer.toArray());
}

这是C#的做法转到java里面之后以下两句有错误
byte value = Convert.ToByte(temp, 16); 错误:Convert cannot be resolved
String str =  System.Text.Encoding.ASCII.GetString(buffer.toArray());错误:Text cannot be resolved or is not a field

求解决办法
------最佳解决方案--------------------
java和C#可不是直接复制过来就能用的...Convert对象和System.Text都不存在。
------其他解决方案--------------------
好的,谢2楼了,我找到方法了,顺便贴过来!
//将16进制数字解码成字符串,适用于所有字符(包括中文)


public static String decode(String bytes)
{
 ByteArrayOutputStream baos=new ByteArrayOutputStream(bytes.length()/2);
//将每2位16进制整数组装成一个字节
String hexString="0123456789ABCDEF";
 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());
}
------其他解决方案--------------------
给你提供俩方法:


/**  
  * 将byte数组转换为表示16进制值的字符串, 如:byte[]{8,18}转换为:0813, 和public static byte[]  
  * hexStr2ByteArr(String strIn) 互为可逆的转换过程  
  *   
  * @param arrB  
  *            需要转换的byte数组  
  * @return 转换后的字符串  
  * @throws Exception  
  *             本方法不处理任何异常,所有异常全部抛出  
  */  
public static String byteArr2HexStr(byte[] arrB) throws Exception {
int iLen = arrB.length;
// 每个byte用两个字符才能表示,所以字符串的长度是数组长度的两倍
StringBuffer sb = new StringBuffer(iLen * 2);
for (int i = 0; i < iLen; i++) {
int intTmp = arrB[i];
// 把负数转换为正数
while (intTmp < 0) {
intTmp = intTmp + 256;
}
// 小于0F的数需要在前面补0
if (intTmp < 16) {
sb.append("0");
}
sb.append(Integer.toString(intTmp, 16));
}
return sb.toString();
}

/**
 * 将表示16进制值的字符串转换为byte数组, 和public static String byteArr2HexStr(byte[] arrB)
 * 互为可逆的转换过程
 * 
 * @param strIn
 *            需要转换的字符串
 * @return 转换后的byte数组