java中对于进制的转换有很多方式,其中对于常见的基本的二进制 八进制 十进制 十六进制等的转换有对于的包装类实现,不需要通过二外的算法来进行实现,具体如下:

首先关于最简单的二进制转换的方法有:

十进制转成十六进制:

String Integer.toHexString(int i)

十进制转成八进制

String Integer.toOctalString(int i)

十进制转成二进制

String Integer.toBinaryString(int i)

十六进制转成十进制

Integer.valueOf("FFFF",16).toString()   //不能处理带前缀的情况 0x

八进制转成十进制

Integer.valueOf("76",8).toString()  //前缀0可以被处理

二进制转十进制

Integer.valueOf("0101",2).toString()

有什么方法可以直接将2,8,16 进制直接转换为10进制的吗 ?

java.lang.Integer类

parseInt(String s, int radix)

使用第二个参数指定的基数,将字符串参数解析为有符号的整数。

examples from jdk:

parseInt("0", 10) returns 0

parseInt("473", 10) returns 473

parseInt("-0", 10) returns 0

parseInt("-FF", 16) returns -255

parseInt("1100110", 2) returns 102

parseInt("2147483647", 10) returns 2147483647

parseInt("-2147483648", 10) returns -2147483648

parseInt("2147483648", 10)throwsa NumberFormatException

parseInt("99",throwsa NumberFormatException

parseInt("Kona", 10)throwsa NumberFormatException

parseInt("Kona", 27)returns 411787

进制转换如何写(二,八,十六)不用算法

Integer.toBinaryString

Integer.toOctalString

Integer.toHexString

然后是介绍java中的byte与十六进制数的转换

原理分析:

Java中的byte是由8个bit组成的,而16进制即16中状态,它是由4个bit来表示的,因为24=16。所以我们可以把一个byte转换成两个用16进制字符,即把高4位和低4位转换成相应的16进制字符,并组合这两个16进制字符串,从而得到byte的16进制字符串。同理,相反的转换也是将两个16进制字符转换成一个byte。

在Java中字节与十六进制的相互转换主要思想有两点:

1、二进制字节转十六进制时,将字节高位与0xF0做"&"操作,然后再左移4位,得到字节高位的十六进制A;将字节低位与0x0F做"&"操作,得到低位的十六进制B,将两个十六进制数拼装到一块AB就是该字节的十六进制表示。

2、十六进制转二进制字节时,将十六进制字符对应的十进制数字右移动4为,得到字节高位A;将字节低位的十六进制字符对应的十进制数字B与A做"|"运算,即可得到十六进制的二进制字节表示

其中一种转换的函数如下:

/**

*

* @param bytes

* @return 将二进制转换为十六进制字符输出

*/ private static String hexStr = "0123456789ABCDEF"; //全局

public static String BinaryToHexString(byte[] bytes){

String result = "";

String hex = "";

for(int i=0;i

//字节高4位

hex = String.valueOf(hexStr.charAt((bytes[i]&0xF0)>>4));

//字节低4位

hex += String.valueOf(hexStr.charAt(bytes[i]&0x0F));

result +=hex;

}

return result;

}

/**

*

* @param hexString

* @return 将十六进制转换为字节数组

*/

public static byte[] HexStringToBinary(String hexString){

//hexString的长度对2取整,作为bytes的长度

int len = hexString.length()/2;

byte[] bytes = new byte[len];

byte high = 0;//字节高四位

byte low = 0;//字节低四位

for(int i=0;i

//右移四位得到高位

high = (byte)((hexStr.indexOf(hexString.charAt(2*i)))<<4);

low = (byte)hexStr.indexOf(hexString.charAt(2*i+1));

bytes[i] = (byte) (high|low);//高地位做或运算

}

return bytes;

}

}

还有一种类似的方法:

* Convert byte[] to hex string.这里我们可以将byte转换成int,然后利用Integer.toHexString(int)来转换成16进制字符串。

* @param src byte[] data

* @return hex string

*/

public static String bytesToHexString(byte[] src){

StringBuilder stringBuilder = new StringBuilder("");

if (src == null || src.length <= 0) {

return null;

}

for (int i = 0; i < src.length; i++) {

int v = src[i] & 0xFF;

String hv = Integer.toHexString(v);

if (hv.length() < 2) {

stringBuilder.append(0);

}

stringBuilder.append(hv);

}

return stringBuilder.toString();

}

/**

* Convert hex string to byte[]

* @param hexString the hex string

* @return byte[]

*/

public static byte[] hexStringToBytes(String hexString) {

if (hexString == null || hexString.equals("")) {

return null;

}

hexString = hexString.toUpperCase();

int length = hexString.length() / 2;

char[] hexChars = hexString.toCharArray();

byte[] d = new byte[length];

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

int pos = i * 2;

d[i] = (byte) (charToByte(hexChars[pos]) << 4 | charToByte(hexChars[pos + 1]));

}

return d;

}

/**

* Convert char to byte

* @param c char

* @return byte

*/

private byte charToByte(char c) {

return (byte) "0123456789ABCDEF".indexOf(c);

}

两种方式类似,这里注意下

上面是将byte[]转化十六进制的字符串,注意这里b[ i ] & 0xFF将一个byte和 0xFF进行了与运算,然后使用Integer.toHexString取得了十六进制字符串,可以看出

b[ i ] & 0xFF运算后得出的仍然是个int,那么为何要和 0xFF进行与运算呢?直接 Integer.toHexString(b[ i ]);,将byte强转为int不行吗?答案是不行的.

其原因在于:

1.byte的大小为8bits而int的大小为32bits

2.java的二进制采用的是补码形式

所以与负数&的时候负数会自动给补码补位1,这样就会有误差

而0xff默认是整形,所以,一个byte跟0xff相与会先将那个byte转化成整形运算,这样,结果中的高的24个比特就总会被清0,于是结果总是我们想要的。

还有一些网上总结的方法:

字符串转换成十六进制字符串方法1:

/**

* 字符串转换成十六进制字符串

*/

public static String str2HexStr(String str) {

char[] chars = "0123456789ABCDEF".toCharArray();

StringBuilder sb = new StringBuilder("");

byte[] bs = str.getBytes();

int bit;

for (int i = 0; i < bs.length; i++) {

bit = (bs[i] & 0x0f0) >> 4;

sb.append(chars[bit]);

bit = bs[i] & 0x0f;

sb.append(chars[bit]);

}

return sb.toString();

}

十六进制字符串转换成为数组方法1:

/**

* 把16进制字符串转换成字节数组

* @param hexString

* @return byte[]

*/

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 int toByte(char c) {

byte b = (byte) "0123456789ABCDEF".indexOf(c);

return b;

}

数组转换成十六进制字符串方法1:

/**

* 数组转换成十六进制字符串

* @param byte[]

* @return HexString

*/

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();

}

byte[]数组转换成十六进制字符串方法2:

/**

* 数组转成十六进制字符串

* @param byte[]

* @return HexString

*/

public static String toHexString1(byte[] b){

StringBuffer buffer = new StringBuffer();

for (int i = 0; i < b.length; ++i){

buffer.append(toHexString1(b[i]));

}

return buffer.toString();

}

public static String toHexString1(byte b){

String s = Integer.toHexString(b & 0xFF);

if (s.length() == 1){

return "0" + s;

}else{

return s;

}

}

十六进制字符串转换字符串方法1:

/**

* 十六进制字符串转换成字符串

* @param hexString

* @return String

*/

public static String hexStr2Str(String hexStr) {

String str = "0123456789ABCDEF";

char[] hexs = hexStr.toCharArray();

byte[] bytes = new byte[hexStr.length() / 2];

int n;

for (int i = 0; i < bytes.length; i++) {

n = str.indexOf(hexs[2 * i]) * 16;

n += str.indexOf(hexs[2 * i + 1]);

bytes[i] = (byte) (n & 0xff);

}

return new String(bytes);

}

十六进制字符串转换字符串方法2:

/**

* 十六进制字符串转换字符串

* @param HexString

* @return String

*/

public static String toStringHex(String s) {

byte[] baKeyword = new byte[s.length() / 2];

for (int i = 0; i < baKeyword.length; i++) {

try {

baKeyword[i] = (byte) (0xff & Integer.parseInt(s.substring(

i * 2, i * 2 + 2), 16));

} catch (Exception e) {

e.printStackTrace();

}

}

try {

s = new String(baKeyword, "utf-8");// UTF-16le:Not

} catch (Exception e1) {

e1.printStackTrace();

}

return s;

}

以上这篇java中进制的转换,Byte与16进制的转换方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。

java 转16进制_java中进制的转换,Byte与16进制的转换方法相关推荐

  1. C#中如何将字符串转换byte[],同时如何将byte[]换成字符串?

    C#中如何将字符串转换byte[],同时如何将byte[]换成字符串? 博客分类: C# CC++C#  1   string   to   byte  []   string   str   =   ...

  2. java 10进制转64进制_JAVA中实现十进制与其它自定义进制进行相互转换。 - yz124的日志 - 网易博客...

    我们通常用到的数字都是十进制的,日常使用的也是这样,但是在程序中,我们可能还会经常用到二进制.八进制.十六进制的数字.既然程序中会使用到,那么就会有它存在的道理.有些时候,将数字用字符串保存到文件或者 ...

  3. java int转无符号_Java中int或long等整型数值如何转换为无符号整数

    Java8 为 Integer.Long包装类增加了如下方法: static  String  toUnsignedString(int/long i):将指定int或long型整数转换为无符号整数对 ...

  4. java 参数代替所有类_Java中的常用类

    1      常用类NO13 [ Int    Interger short  Short byte   Byte double Double float   Float Boolean Boolea ...

  5. java常见的报错_Java中常见的错误有哪些?

    原标题:Java中常见的错误有哪些? 1.java.lang.Error 错误.是所有错误的基类,用于标识严重的程序运行问题.这些问题通常描述一些不应被应用程序捕获的反常情况. 原因: 1.对系统所访 ...

  6. java原始类型和引用类型_Java中的8种原始类型

    java原始类型和引用类型 几年前,当我开始编辑Java Basics系列时,我认为将一些非常详细的信息拉到自己的帖子中是很有意义的. 这样,初学者的内容就更容易消化了. 首先,我将介绍有关Java的 ...

  7. java ascii码转字符_java中char对应的ASCII码的转化操作

    java中,char类型变量可以强制转化为int类型变量,int类型变量也可以强制转化成char类型的变量: char c='a'; int i=98; System.out.println((int ...

  8. 随机数在java 自旋锁的运用_Java 中自旋锁的实现

    Java中初始是使用mutex互斥锁,因为互斥锁是会线程等待挂起,而对获取锁后的操作时间比较短暂的应用场景来说,这样的锁会让竞争锁的线程不停的park,unpark 的操作,这样的系统的调用性能是非常 ...

  9. java swap函数的包_java中swap函数

    ? ? ? 第1章 第2章 第3章 第4章 java语言概述 Java语言基础 对象与类 ...("swap方法里,a的值是" + a + ";b的值 是" + ...

  10. java boolean几个字节_Java中boolean类型到底占用多少个字节?

    1.时间:2017-07-03 07:37:06YuanMxy 2.问题描述:今天在复习java基础的时候发现一小问题,Java中boolean类型到底占用多少个字节? 3.问题解答: (1)什么是b ...

最新文章

  1. 江苏省计算机学会科学技术奖,孙国梓
  2. Java如何查看死锁?
  3. Memcached 缓存个体,对象,泛型,表
  4. 使用Lucene的搜索服务器搜索Jira问题
  5. win7 删除Windows服务的方法
  6. const与define之间的区别?
  7. html设置数组的方法,js改变原数组的方法有哪些?
  8. 清空文件夹_回收站不小心被清空?简单3步即刻找回丢失文件,值得收藏!
  9. 浅谈智能卡加密芯片在智能设备领域的技术运用
  10. 学习总结 java 父子级
  11. 渗透测试基础-XSS漏洞简析
  12. 为什么不能说“接受原假设”?
  13. 形式化验证和功能验证VC Formal-synopsys芯片验证基础篇(六)
  14. 白鲸优化算法(Beluga whale optimization,BWO)Python实现
  15. ADS1278字符驱动
  16. 吴恩达——机器学习 局部加权回归(Loess)
  17. VMware ESX Server 常用命令行
  18. AD的设计里面找不到生成PCB选项
  19. 注意力模型(GAT)
  20. 详解笔记本屏幕的那点事儿

热门文章

  1. python计算直角三角形斜边上的中线_如何证明直角三角形斜边上的中线
  2. 淘客外卖返利小程序搭建 - 美团联盟外卖返利小程序平台、饿了么返利小程序系统、外卖cps小程序
  3. 概率论的学习和整理10:古典概型 和 二项分布(N重伯努利试验)
  4. MyBatis第一天课堂笔记
  5. Android代码获取手机品牌、手机型号、手机唯一序列号
  6. 利用栈实现对后缀表达式(逆波兰表达式)的求解(C代码实现)
  7. php计算众数,C++算法代码——众数
  8. 【MySQL数据库】- 多表查询
  9. [MRCTF2020]你传你马呢
  10. 微信客户端电话人工服务器,微信客服电话多少 微信客服电话人工服务怎么接通...