`

Java 不同进制数转换

 
阅读更多

Java 不同进制数转换

import java.io.ByteArrayInputStream;  
import java.io.ByteArrayOutputStream;  
import java.io.IOException;  
import java.io.ObjectInputStream;  
import java.io.ObjectOutputStream;  
import java.io.Serializable;  
import java.security.MessageDigest;  
import java.security.NoSuchAlgorithmException;  
  
public final class Converts {  
  
 public final static char[] BToA = "0123456789abcdef".toCharArray() ;  
 private Converts() {  
 }  
  
 /** 
  * 把16进制字符串转换成字节数组 
  * @param hex 
  * @return 
  */  
 public static byte[] hexStringToByte(String hex) {  
  int len = (hex.length() / 2);  
  byte[] result = new byte[len];  
  char[] achar = hex.toCharArray();  
  for (int i = 0; i < len; i++) {  
   int pos = i * 2;  
   result[i] = (byte) (toByte(achar[pos]) << 4 | toByte(achar[pos + 1]));  
  }  
  return result;  
 }  
  
 private static byte toByte(char c) {  
  byte b = (byte) "0123456789ABCDEF".indexOf(c);  
  return b;  
 }  
  
 /** 
  * 把字节数组转换成16进制字符串 
  * @param bArray 
  * @return 
  */  
 public static final String bytesToHexString(byte[] bArray) {  
  StringBuffer sb = new StringBuffer(bArray.length);  
  String sTemp;  
  for (int i = 0; i < bArray.length; i++) {  
   sTemp = Integer.toHexString(0xFF & bArray[i]);  
   if (sTemp.length() < 2)  
    sb.append(0);  
   sb.append(sTemp.toUpperCase());  
  }  
  return sb.toString();  
 }  
  
 /** 
  * 把字节数组转换为对象 
  * @param bytes 
  * @return 
  * @throws IOException 
  * @throws ClassNotFoundException 
  */  
 public static final Object bytesToObject(byte[] bytes) throws IOException, ClassNotFoundException {  
  ByteArrayInputStream in = new ByteArrayInputStream(bytes);  
  ObjectInputStream oi = new ObjectInputStream(in);  
  Object o = oi.readObject();  
  oi.close();  
  return o;  
 }  
  
 /** 
  * 把可序列化对象转换成字节数组 
  * @param s 
  * @return 
  * @throws IOException 
  */  
 public static final byte[] objectToBytes(Serializable s) throws IOException {  
  ByteArrayOutputStream out = new ByteArrayOutputStream();  
  ObjectOutputStream ot = new ObjectOutputStream(out);  
  ot.writeObject(s);  
  ot.flush();  
  ot.close();  
  return out.toByteArray();  
 }  
   
 public static final String objectToHexString(Serializable s) throws IOException{  
  return bytesToHexString(objectToBytes(s));  
 }  
   
 public static final Object hexStringToObject(String hex) throws IOException, ClassNotFoundException{  
  return bytesToObject(hexStringToByte(hex));  
 }  
   
 /** 
  * @函数功能: BCD码转为10进制串(阿拉伯数据) 
  * @输入参数: BCD码 
  * @输出结果: 10进制串 
  */  
 public static String bcd2Str(byte[] bytes){  
  StringBuffer temp=new StringBuffer(bytes.length*2);  
  
  for(int i=0;i>>4));  
   temp.append((byte)(bytes[i]& 0x0f));  
  }  
  return temp.toString().substring(0,1).equalsIgnoreCase("0")?temp.toString().substring(1):temp.toString();  
 }  
  
 /** 
  * @函数功能: 10进制串转为BCD码 
  * @输入参数: 10进制串 
  * @输出结果: BCD码 
  */  
 public static byte[] str2Bcd(String asc) {  
  int len = asc.length();  
  int mod = len % 2;  
  
  if (mod != 0) {  
   asc = "0" + asc;  
   len = asc.length();  
  }  
  
  byte abt[] = new byte[len];  
  if (len >= 2) {  
   len = len / 2;  
  }  
  
  byte bbt[] = new byte[len];  
  abt = asc.getBytes();  
  int j, k;  
  
  for (int p = 0; p < asc.length()/2; p++) {  
   if ( (abt[2 * p] >= '0') && (abt[2 * p] <= '9')) {  
    j = abt[2 * p] - '0';  
   } else if ( (abt[2 * p] >= 'a') && (abt[2 * p] <= 'z')) {  
    j = abt[2 * p] - 'a' + 0x0a;  
   } else {  
    j = abt[2 * p] - 'A' + 0x0a;  
   }  
  
   if ( (abt[2 * p + 1] >= '0') && (abt[2 * p + 1] <= '9')) {  
    k = abt[2 * p + 1] - '0';  
   } else if ( (abt[2 * p + 1] >= 'a') && (abt[2 * p + 1] <= 'z')) {  
    k = abt[2 * p + 1] - 'a' + 0x0a;  
   }else {  
    k = abt[2 * p + 1] - 'A' + 0x0a;  
   }  
  
   int a = (j << 4) + k;  
   byte b = (byte) a;  
   bbt[p] = b;  
  }  
  return bbt;  
 }  
   
 public static String BCD2ASC(byte[] bytes) {  
  StringBuffer temp = new StringBuffer(bytes.length * 2);  
  
  for (int i = 0; i < bytes.length; i++) {  
   int h = ((bytes[i] & 0xf0) >>> 4);  
   int l = (bytes[i] & 0x0f);     
   temp.append(BToA[h]).append( BToA[l]);  
  }  
  return temp.toString() ;  
 }  
   
 /** 
  * MD5加密字符串,返回加密后的16进制字符串 
  * @param origin 
  * @return 
  */  
 public static String MD5EncodeToHex(String origin) {   
     return bytesToHexString(MD5Encode(origin));  
   }  
   
 /** 
  * MD5加密字符串,返回加密后的字节数组 
  * @param origin 
  * @return 
  */  
 public static byte[] MD5Encode(String origin){  
  return MD5Encode(origin.getBytes());  
 }  
   
 /** 
  * MD5加密字节数组,返回加密后的字节数组 
  * @param bytes 
  * @return 
  */  
 public static byte[] MD5Encode(byte[] bytes){  
  MessageDigest md=null;  
  try {  
   md = MessageDigest.getInstance("MD5");  
   return md.digest(bytes);  
  } catch (NoSuchAlgorithmException e) {  
   e.printStackTrace();  
   return new byte[0];  
  }  
    
 }  
}  
分享到:
评论

相关推荐

    浮点数与十进制数转换工具

    在编程语言中,如Python、Java、C++等,都有内置的函数或者库来支持浮点数和十进制数之间的转换,例如Python的`float()`和`int()`函数,Java的`Float.parseFloat()`和`Integer.parseInt()`方法。理解这些转换机制...

    java 各种进制的转换

    此外,文件名中的 `TextZhuanhuan.java` 暗示可能有一个类或方法实现了进制转换的功能,而 `Java.jpg` 则可能是用来辅助理解进制转换概念的图像。 总结来说,Java提供了丰富的内置函数来支持各种进制间的转换,无论...

    Java实现的进制转换工具类完整示例

    Java实现的进制转换工具类完整示例 Java实现的进制转换工具类是Java语言中的一种常用工具类,用于实现各种进制之间的转换操作,如二进制、十六进制、字符串、数组等。该工具类主要提供了将字节数组转换为十六进制...

    数字各种进制的转换

    2. **进制转换**:指不同进制数之间进行转换的过程。主要包括两种类型: - **非十进制到十进制的转换**:采用权重法,即根据各个位上的数字乘以其所在位置的权值(进制的幂次方),再相加得到十进制数。 - **十...

    将十进制数N转换为r进制的数(Java)代码

    这种转换在处理计算机中的二进制、八进制、十六进制转换时尤其有用,因为它们是计算机常用的基础进制。 总的来说,理解和掌握将十进制数转换为任意进制的算法对于程序员来说至关重要,尤其是在进行位运算、数据编码...

    java_十进制数转换为二进制,八进制,十六进制数的算法

    `chang`函数则专门用于处理十六进制转换中余数为10到15的情况。 ### 示例代码 虽然提供的代码片段包含了一些非Java语法(如C#特有的命名空间和类定义),但核心转换逻辑清晰可见。例如,在`DtoB`函数中,通过循环...

    JAVA 十进制数转二进制数

    输入一个整十进制数n,把它转化为二进制,小数部分还没有考虑。。。

    Java实现任意进制的转换

    在编程领域,进制转换是一项基础且重要的技能,特别是在处理二进制、八进制、十进制和十六进制等不同数值系统时。本文将详细介绍如何使用Java语言实现任意进制之间的转换,并涵盖从二进制到十六进制、从十进制到任意...

    java中进制转换(二进制,十进制,十六进制)及字节数组与十六进制的转换

    在Java编程中,进制转换是一项基础且重要的技能,尤其在处理数据传输、网络通信(如蓝牙通信)或者低级别数据处理时。本篇将详细阐述如何在Java中进行二进制、十进制和十六进制之间的转换,以及字节数组与十六进制...

    JAVA实用进制转换

    Java作为一种广泛使用的编程语言,提供了多种内置的方法来实现不同进制之间的转换,比如从十进制转换到二进制、八进制或十六进制,以及反向转换。 #### 二、Java中的进制转换方法 ##### 1. 十进制转其他进制 Java...

    Java进制转换,十六进制、十进制、二进制

    Java进制转换 正整数的十进制转换二进制 将一个十进制数除以二,得到的商再除以二,依此类推直到商等于一或零时为止,倒取除得的余数,即换算为二进制数的结果。只需记住要点:除二取余,倒序排列。 由于计算机...

    java 进制转换工具类 java 进制转换工具类

    java 进制转换工具类 java 进制转换工具类java 进制转换工具类 java 进制转换工具类java 进制转换工具类 java 进制转换工具类

    java 26进制转换

    在Java编程语言中,26进制转换是一种特殊形式的编码,它不是标准的计算机科学概念,但在某些特定场景下可能会被用到。通常,我们谈论的进制转换包括二进制、八进制、十进制和十六进制之间的转换。然而,"26进制"通常...

    java实现各进制之间转换

    Java还提供了`Format`类和`DecimalFormat`类,可以用于更复杂的进制转换。例如,你可以创建一个格式对象,指定源和目标进制,然后进行转换。 6. **位运算符辅助转换** 除了上述方法,还可以利用位运算符进行进制...

    java基础,进制转换.pdf

    - 二进制转换:通过计算机内的算法,可以将一个数值在不同进制间进行转换,例如将十进制转换为二进制,或者相反。 - 数据类型范围:每种数据类型有其对应的取值范围。 - 转码:涉及到字符编码的转换,如UTF-8编码...

    java 将文件中二进制文件转换成文本文本文件并输出

    在Java编程语言中,将二进制文件转换为文本文档通常涉及到字符编码的理解和处理。二进制文件可以包含任何类型的数据,如图像、音频、视频或纯文本,但以非可读格式存储。而文本文档通常使用特定的字符编码(如ASCII...

    Java编写的进制转换程序

    在编程领域,进制转换是一项基础且重要的技能,尤其是在处理二进制、八进制、十进制和十六进制等不同数值系统时。Java语言提供了丰富的API来支持这些转换,使得开发者能够轻松地在各种进制间进行切换。本项目就是一...

    java 实现十六进制数转为图片

    在Java编程语言中,将十六进制数转换为图片是一项有趣且实用的技术,它涉及到颜色编码、位操作以及图像处理。下面将详细讲解这个过程,包括核心知识点和具体实现步骤。 首先,我们要理解十六进制数与像素颜色的关系...

    java二进制运算器(加、见、乘、除)

    7. **二进制转换**: 在Java中,我们可以使用Integer.toBinaryString()方法将十进制数转换为二进制字符串,而Integer.parseInt()或Integer.valueOf()可以将二进制字符串转换回十进制数。 8. **实现二进制运算器**: ...

Global site tag (gtag.js) - Google Analytics