浅谈java二进制、十进制、十六进制、字符串之间的相互转换

1. 字节转10进制

直接使用(int)类型转换。

/*
  * 字节转10进制
  */
 public static int byte2Int(byte b){
  int r = (int) b;
  return r;
 }

2. 10进制转字节

直接使用(byte)类型转换。

/*
  * 10进制转字节
  */
 public static byte int2Byte(int i){
  byte r = (byte) i;
  return r;
 }

3. 字节数组转16进制字符串

对每一个字节,先和0xFF做与运算,然后使用Integer.toHexString()函数,如果结果只有1位,需要在前面加0。

/*
  * 字节数组转16进制字符串
  */
 public static String bytes2HexString(byte[] b) {
  String r = "";

  for (int i = 0; i < b.length; i++) {
   String hex = Integer.toHexString(b[i] & 0xFF);
   if (hex.length() == 1) {
    hex = '0' + hex;
   }
   r += hex.toUpperCase();
  }

  return r;
 }

4. 16进制字符串转字节数组

这个比较复杂,每一个16进制字符是4bit,一个字节是8bit,所以两个16进制字符转换成1个字节,对于第1个字符,转换成byte以后左移4位,然后和第2个字符的byte做或运算,这样就把两个字符转换为1个字节。

/*
  * 字符转换为字节
  */
 private static byte charToByte(char c) {
  return (byte) "0123456789ABCDEF".indexOf(c);
  }

 /*
  * 16进制字符串转字节数组
  */
 public static byte[] hexString2Bytes(String hex) {

   if ((hex == null) || (hex.equals(""))){
    return null;
   }
   else if (hex.length()%2 != 0){
    return null;
   }
   else{
    hex = hex.toUpperCase();
    int len = hex.length()/2;
    byte[] b = new byte[len];
    char[] hc = hex.toCharArray();
    for (int i=0; i<len; i++){
     int p=2*i;
     b[i] = (byte) (charToByte(hc[p]) << 4 | charToByte(hc[p+1]));
    }
    return b;
   }   

 }

5. 字节数组转字符串

直接使用new String()。

/*
  * 字节数组转字符串
  */
 public static String bytes2String(byte[] b) throws Exception {
  String r = new String (b,"UTF-8");
  return r;
 }

6. 字符串转字节数组

直接使用getBytes()。

/*
  * 字符串转字节数组
  */
 public static byte[] string2Bytes(String s){
  byte[] r = s.getBytes();
  return r;
 }

7. 16进制字符串转字符串

先转换成byte[],再转换成字符串。

/*
  * 16进制字符串转字符串
  */
 public static String hex2String(String hex) throws Exception{
  String r = bytes2String(hexString2Bytes(hex));
  return r;
 }

8. 字符串转16进制字符串

先转换为byte[],再转换为16进制字符串。

/*
  * 字符串转16进制字符串
  */
 public static String string2HexString(String s) throws Exception{
  String r = bytes2HexString(string2Bytes(s));
  return r;
 }

main函数:

public static void main(String[] args) throws Exception{
  byte b1 = (byte) 45;
  System.out.println("1.字节转10进制:" + byte2Int(b1));

  int i = 89;
  System.out.println("2.10进制转字节:" + int2Byte(i));

  byte[] b2 = new byte[]{(byte)0xFF, (byte)0x5F, (byte)0x6, (byte)0x5A};
  System.out.println("3.字节数组转16进制字符串:" + bytes2HexString(b2));

  String s1 = new String("1DA47C");
  System.out.println("4.16进制字符串转字节数组:" + Arrays.toString(hexString2Bytes(s1)));

  System.out.println("5.字节数组转字符串:" + bytes2String(b2));

  System.out.println("6.字符串转字节数组:" + Arrays.toString(string2Bytes(s1)));

  System.out.println("7.16进制字符串转字符串:" + hex2String(s1));

  String s2 = new String("Hello!");
  System.out.println("8.字符串转16进制字符串:" + string2HexString(s2));
 }

运行结果:

1.字节转10进制:45
2.10进制转字节:89
3.字节数组转16进制字符串:FF5F065A
4.16进制字符串转字节数组:[29, -92, 124]
5.字节数组转字符串:?_Z
6.字符串转字节数组:[49, 68, 65, 52, 55, 67]
7.16进制字符串转字符串:?|
8.字符串转16进制字符串:48656C6C6F21

以上这篇浅谈二进制、十进制、十六进制、字符串之间的相互转换就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • 十进制与BCD码转换的算法详解

    目录 BCD码 算法原理 总结 手头上在做的项目需要用到ds1302实时时钟,ds1302读出来的数据是BCD码,需要转换,写入也是. BCD码 BCD是指用二进制来表示十进制数的编码,即用4位二进制来表示一位十进制数,因此4位二进制数表示最大的十进制数9(1001),只取十六个数中的十个数. 比如: BCD码:0x99(153),该BCD码转换成十进制是99. 算法原理 十进制是逢十进一,而十六进制是逢十六进一,它们之间的每次进位差 6 6 ,所以一个十进制数要转换成BCD码,要先算清多进位的

  • 科学知识:二进制、八进制、十进制、十六进制转换

    一. 十进制与二进制之间的转换 (1) 十进制转换为二进制,分为整数部分和小数部分 ① 整数部分 方法:除2取余,逆序排列,即每次将整数部分除以2,余数为该位权上的数,而商继续除以2,余数又为上一个位权上的数,这个步骤一直持续下去,直到商为0为止,最后读数时候,从最后一个余数读起,一直到最前面的一个余数.下面举例: 例:将十进制的168转换为二进制 得出结果 将十进制的168转换为二进制,(10101000) 第一步,将168除以2,商84,余数为0. 第二步,将商84除以2,商42余数为0.

  • 一篇教程教你学会Python进制转换(十进制转二进制、八进制、十六进制)

    一.导言 导语: 在计算机进行数据交换时,常常会有一个进制转换的过程,我们知道计算机只认0 和 1.在内存系统中,基本基于二进制进行运算的,但是有时候数据过于庞大,为了方便存储管理,计算机会使用十六进制存储数据,但是怎么实现数据转换呢? 我们人类由十根手指头,所以自然就使用十进制啦,每当我们数数字到10之后,于是就重0 开始继续数,所以逢十进一就这么来了. 对于其它进制呢,也是同样的,比如最常见的二进制,也就是逢二进一,慢慢来,依次类推,所以数学的世界是多么的奇妙呀! 今天给大家带来的是使用 P

  • Java之实现十进制与十六进制转换案例讲解

    写了两种十六进制转十进制的方式,仅供参考. 基本思路:用十六进制中每一位数乘以对应的权值,再求和就是对应的十进制 方法一: import java.util.HashMap; import java.util.Map; import java.util.Scanner; public class Test { /** * @param: [content] * @return: int * @description: 十六进制转十进制 */ public static int covert(St

  • C# 进制转换的实现(二进制、十六进制、十进制互转)

    由于二进制数在C#中无法直接表示,所以所有二进制数都用一个字符串来表示 例如: 二进制: 1010 表示为 字符串:"1010"  int d = 10; //十进制转二进制字符串 Console.WriteLine(Convert.ToString(d,2)); //输出: 1010 //十进制转十六进制字符串 Console.WriteLine(Convert.ToString(d,16)); //输出: a //二进制字符串转十进制数 string bin = "101

  • 浅谈Java中Map和Set之间的关系(及Map.Entry)

    1.通过查找API文档: 2.Map.Entry是一个接口,所以不能直接实例化. 3.Map.entrySet( )返回的是一个collection集合,并且,这个collection中的元素是Map.Entry类型,如下图所示: 4. Map是Java中的接口,Map.Entry是Map的一个内部接口.java.util.Map.Entry接口主要就是在遍历map的时候用到. Map提供了一些常用方法,如keySet().entrySet()等方法,keySet()方法返回值是Map中key值

  • 浅谈java二进制、十进制、十六进制、字符串之间的相互转换

    1. 字节转10进制 直接使用(int)类型转换. /* * 字节转10进制 */ public static int byte2Int(byte b){ int r = (int) b; return r; } 2. 10进制转字节 直接使用(byte)类型转换. /* * 10进制转字节 */ public static byte int2Byte(int i){ byte r = (byte) i; return r; } 3. 字节数组转16进制字符串 对每一个字节,先和0xFF做与运算

  • 浅谈二进制、十进制、十六进制、字符串之间的相互转换

    1. 字节转10进制 直接使用(int)类型转换. /* * 字节转10进制 */ public static int byte2Int(byte b){ int r = (int) b; return r; } 2. 10进制转字节 直接使用(byte)类型转换. /* * 10进制转字节 */ public static byte int2Byte(int i){ byte r = (byte) i; return r; } 3. 字节数组转16进制字符串 对每一个字节,先和0xFF做与运算

  • 浅谈java中字符串数组、字符串、整形之间的转换

    字符串数组转字符串(只能通过for循环): String[] str = {"abc", "bcd", "def"}; StringBuffer sB = new StringBuffer(); for (int i = 0; i < str.length;i++) { sB.append(str[i]); } String s = sB.toString(); 字符数组转字符串可以通过下面的方式: char[] data = {"

  • 浅谈java 字符串,字符数组,list间的转化

    1.关于java.lang.string.split xxx.split()方法可以将一个字符串分割为子字符串,然后将结果作为字符串数组返回. 2.字符串转字符数组 String str =" aa.png,a2.png,a3.png"; String[] arrayStr =new String[]{}; arrayStr = str.split(","); 3.字符数组转list List list = java.util.Arrays.asList(array

  • 浅谈java String.split丢失结尾空字符串的问题

    java中的split函数用于将字符串分割为字符数组是很方便的,但由于不是很熟悉,犯了错误 如下: String strtest = "1,2,"; String arry[] = strtest.split(","); 这样得到的数组元素个数只是2两个,为什么呢,最后一个","后没有内容,它没有作为空字符串成为第三个数组元素,结尾的空字符串被丢弃了! 这个函数还有另一种重载方式 :public String [] split (String 

  • 浅谈java对象之间相互转化的多种方式

    第一种:使用org.apache.commons.beanutils.PropertyUtils.copyProperties()拷贝一个bean中的属性到另一个bean中,第一个参数是目标bean,第二个参数是源bean. 特点: 1.它的性能问题相当差 2.PropertyUtils有自动类型转换功能,而java.util.Date恰恰是其不支持的类型 3.PropertyUtils支持为null的场景: public static void copyProperties(Object de

  • 浅谈Java中Int、Integer、Integer.valueOf()、new Integer()之间的区别

    目录 Int Integer和Integer.valueOf() new Integer() 三者之间的比较 Int Int是Java八种基本数据类型之一,一般大小为4字节32位,取值范围为2-31-231.两个Int类型变量用"=="比较的是值的大小. package com.company.algorithm; public class Main { public static void main(String[] args) { int a = 100; int b = 100;

  • 浅谈Python里面None True False之间的区别

    None虽然跟True False一样都是布尔值. 虽然None不表示任何数据,但却具有很重要的作用. 它和False之间的区别还是很大的! 例子: >>> t = None >>> if t: ... print("something") ... else: ... print("nothing") ... nothing 区分None和False.使用is来操作! >>> if t is None: ...

  • 浅谈Java中Unicode的编码和实现

    Unicode的编码和实现 大概来说,Unicode编码系统可分为编码方式和实现方式两个层次. 编码方式 字符是抽象的最小文本单位.它没有固定的形状(可能是一个字形),而且没有值."A"是一个字符,"€"也是一个字符.字符集是字符的集合.编码字符集是一个字符集,它为每一个字符分配一个唯一数字. Unicode 最初设计是作为一种固定宽度的 16 位字符编码.也就是每个字符占用2个字节.这样理论上一共最多可以表示216(即65536)个字符.上述16位统一码字符构成基

随机推荐