最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

java中進(jìn)制的轉(zhuǎn)換,Byte與16進(jìn)制的轉(zhuǎn)換方法

 更新時(shí)間:2016年11月15日 11:10:37   投稿:jingxian  
下面小編就為大家?guī)硪黄猨ava中進(jìn)制的轉(zhuǎn)換,Byte與16進(jìn)制的轉(zhuǎn)換方法。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧

java中對于進(jìn)制的轉(zhuǎn)換有很多方式,其中對于常見的基本的二進(jìn)制 八進(jìn)制 十進(jìn)制 十六進(jìn)制等的轉(zhuǎn)換有對于的包裝類實(shí)現(xiàn),不需要通過二外的算法來進(jìn)行實(shí)現(xiàn),具體如下:

首先關(guān)于最簡單的二進(jìn)制轉(zhuǎn)換的方法有:

十進(jìn)制轉(zhuǎn)成十六進(jìn)制:
String Integer.toHexString(int i)
十進(jìn)制轉(zhuǎn)成八進(jìn)制
String Integer.toOctalString(int i)
十進(jìn)制轉(zhuǎn)成二進(jìn)制
 String Integer.toBinaryString(int i)
十六進(jìn)制轉(zhuǎn)成十進(jìn)制
Integer.valueOf("FFFF",16).toString()   //不能處理帶前綴的情況 0x
八進(jìn)制轉(zhuǎn)成十進(jìn)制
Integer.valueOf("76",8).toString()  //前綴0可以被處理
二進(jìn)制轉(zhuǎn)十進(jìn)制
Integer.valueOf("0101",2).toString() 

有什么方法可以直接將2,8,16 進(jìn)制直接轉(zhuǎn)換為10進(jìn)制的嗎 ?

java.lang.Integer類

parseInt(String s, int radix)

使用第二個(gè)參數(shù)指定的基數(shù),將字符串參數(shù)解析為有符號(hào)的整數(shù)。

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

進(jìn)制轉(zhuǎn)換如何寫(二,八,十六)不用算法
Integer.toBinaryString
Integer.toOctalString
Integer.toHexString

然后是介紹java中的byte與十六進(jìn)制數(shù)的轉(zhuǎn)換

原理分析:

Java中的byte是由8個(gè)bit組成的,而16進(jìn)制即16中狀態(tài),它是由4個(gè)bit來表示的,因?yàn)?4=16。所以我們可以把一個(gè)byte轉(zhuǎn)換成兩個(gè)用16進(jìn)制字符,即把高4位和低4位轉(zhuǎn)換成相應(yīng)的16進(jìn)制字符,并組合這兩個(gè)16進(jìn)制字符串,從而得到byte的16進(jìn)制字符串。同理,相反的轉(zhuǎn)換也是將兩個(gè)16進(jìn)制字符轉(zhuǎn)換成一個(gè)byte。

在Java中字節(jié)與十六進(jìn)制的相互轉(zhuǎn)換主要思想有兩點(diǎn):

1、二進(jìn)制字節(jié)轉(zhuǎn)十六進(jìn)制時(shí),將字節(jié)高位與0xF0做"&"操作,然后再左移4位,得到字節(jié)高位的十六進(jìn)制A;將字節(jié)低位與0x0F做"&"操作,得到低位的十六進(jìn)制B,將兩個(gè)十六進(jìn)制數(shù)拼裝到一塊AB就是該字節(jié)的十六進(jìn)制表示。

2、十六進(jìn)制轉(zhuǎn)二進(jìn)制字節(jié)時(shí),將十六進(jìn)制字符對應(yīng)的十進(jìn)制數(shù)字右移動(dòng)4為,得到字節(jié)高位A;將字節(jié)低位的十六進(jìn)制字符對應(yīng)的十進(jìn)制數(shù)字B與A做"|"運(yùn)算,即可得到十六進(jìn)制的二進(jìn)制字節(jié)表示

其中一種轉(zhuǎn)換的函數(shù)如下:

/** 
*  
* @param bytes 
* @return 將二進(jìn)制轉(zhuǎn)換為十六進(jìn)制字符輸出 
*/ </span>    private static String hexStr = "0123456789ABCDEF"; //全局
	   public static String BinaryToHexString(byte[] bytes){  
   
  String result = "";  
  String hex = "";  
  for(int i=0;i<bytes.length;i++){  
    //字節(jié)高4位  
    <strong>hex = String.valueOf(hexStr.charAt((bytes[i]&0xF0)>>4)); </strong>
    //字節(jié)低4位  
   <strong>hex += String.valueOf(hexStr.charAt(bytes[i]&0x0F)); </strong> 
    result +=hex;  
  }  
  return result;  
	   }  
	   /** 
*  
* @param hexString 
* @return 將十六進(jìn)制轉(zhuǎn)換為字節(jié)數(shù)組 
*/ 
	   public static byte[] HexStringToBinary(String hexString){  
  //hexString的長度對2取整,作為bytes的長度  
  int len = hexString.length()/2;  
  byte[] bytes = new byte[len];  
  byte high = 0;//字節(jié)高四位  
  byte low = 0;//字節(jié)低四位  
	  
  for(int i=0;i<len;i++){  
    //右移四位得到高位  
    high = (byte)((hexStr.indexOf(hexString.charAt(2*i)))<<4);  
    low = (byte)hexStr.indexOf(hexString.charAt(2*i+1));  
    bytes[i] = (byte) (high|low);//高地位做或運(yùn)算  
  }  
  return bytes;  
	   }  
	 } 

還有一種類似的方法:
    
<span style="font-size:14px;">* Convert byte[] to hex string.這里我們可以將byte轉(zhuǎn)換成int,然后利用Integer.toHexString(int)來轉(zhuǎn)換成16進(jìn)制字符串。 

* @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); 
} </span>

兩種方式類似,這里注意下

上面是將byte[]轉(zhuǎn)化十六進(jìn)制的字符串,注意這里b[ i ] & 0xFF將一個(gè)byte和 0xFF進(jìn)行了與運(yùn)算,然后使用Integer.toHexString取得了十六進(jìn)制字符串,可以看出

b[ i ] & 0xFF運(yùn)算后得出的仍然是個(gè)int,那么為何要和 0xFF進(jìn)行與運(yùn)算呢?直接 Integer.toHexString(b[ i ]);,將byte強(qiáng)轉(zhuǎn)為int不行嗎?答案是不行的.

其原因在于:

1.byte的大小為8bits而int的大小為32bits
2.java的二進(jìn)制采用的是補(bǔ)碼形式

所以與負(fù)數(shù)&的時(shí)候負(fù)數(shù)會(huì)自動(dòng)給補(bǔ)碼補(bǔ)位1,這樣就會(huì)有誤差

而0xff默認(rèn)是整形,所以,一個(gè)byte跟0xff相與會(huì)先將那個(gè)byte轉(zhuǎn)化成整形運(yùn)算,這樣,結(jié)果中的高的24個(gè)比特就總會(huì)被清0,于是結(jié)果總是我們想要的。

還有一些網(wǎng)上總結(jié)的方法:

字符串轉(zhuǎn)換成十六進(jìn)制字符串方法1:

/** 
   * 字符串轉(zhuǎn)換成十六進(jìn)制字符串
   */ 
  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(); 
  } 

十六進(jìn)制字符串轉(zhuǎn)換成為數(shù)組方法1:

/**
  * 把16進(jìn)制字符串轉(zhuǎn)換成字節(jié)數(shù)組
  * @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;
 }

數(shù)組轉(zhuǎn)換成十六進(jìn)制字符串方法1:

/**
 * 數(shù)組轉(zhuǎn)換成十六進(jìn)制字符串
 * @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[]數(shù)組轉(zhuǎn)換成十六進(jìn)制字符串方法2:

/**
   * 數(shù)組轉(zhuǎn)成十六進(jìn)制字符串
   * @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;
    }
  }

十六進(jìn)制字符串轉(zhuǎn)換字符串方法1:

/**
 * 十六進(jìn)制字符串轉(zhuǎn)換成字符串
 * @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); 
  }

十六進(jìn)制字符串轉(zhuǎn)換字符串方法2:

/**
   * 十六進(jìn)制字符串轉(zhuǎn)換字符串
   * @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中進(jìn)制的轉(zhuǎn)換,Byte與16進(jìn)制的轉(zhuǎn)換方法就是小編分享給大家的全部內(nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • IDEA新手必備之各種快捷鍵詳解

    IDEA新手必備之各種快捷鍵詳解

    這篇文章主要介紹了IDEA新手必備之各種快捷鍵詳解,文中有非常詳細(xì)的快捷鍵介紹,對正在使用IDEA的小伙伴們有非常好的幫助,需要的朋友可以參考下
    2021-04-04
  • Spring?Cloud?Eureka高可用配置(踩坑記錄)

    Spring?Cloud?Eureka高可用配置(踩坑記錄)

    在進(jìn)行Eureka高可用配置時(shí),控制臺(tái)一直出現(xiàn)“......”的錯(cuò)誤,但是在瀏覽器中輸入地址:peer1:8761 卻是可正常運(yùn)行,這篇文章主要介紹了Spring?Cloud踩坑之Eureka高可用配置,需要的朋友可以參考下
    2023-08-08
  • 使用Spring中的scope配置和@scope注解

    使用Spring中的scope配置和@scope注解

    這篇文章主要介紹了使用Spring中的scope配置和@scope注解,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-06-06
  • Spring Boot Web應(yīng)用程序配置詳解

    Spring Boot Web應(yīng)用程序配置詳解

    這篇文章主要介紹了Spring Boot Web應(yīng)用程序配置詳解,本文中將介紹一些Web應(yīng)用程序最常用的配置,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-05-05
  • Java三大特性-封裝知識(shí)小結(jié)

    Java三大特性-封裝知識(shí)小結(jié)

    所有的面向?qū)ο缶幊陶Z言的思路都是差不多的,而這三大特性,則是思路中的支柱點(diǎn),接下來我就重點(diǎn)講解了一下java三大特性-封裝,感興趣的朋友跟隨腳本之家小編一起看看吧
    2018-03-03
  • 如何用Java?幾分鐘處理完?30?億個(gè)數(shù)據(jù)(項(xiàng)目難題)

    如何用Java?幾分鐘處理完?30?億個(gè)數(shù)據(jù)(項(xiàng)目難題)

    現(xiàn)有一個(gè) 10G 文件的數(shù)據(jù),里面包含了 18-70 之間的整數(shù),分別表示 18-70 歲的人群數(shù)量統(tǒng)計(jì),今天小編通過本文給大家講解如何用Java?幾分鐘處理完?30?億個(gè)數(shù)據(jù),這個(gè)問題一直以來是項(xiàng)目難題,今天通過本文給大家詳細(xì)介紹下,感興趣的朋友一起看看吧
    2022-07-07
  • Java實(shí)現(xiàn)復(fù)雜的進(jìn)制轉(zhuǎn)換器功能示例

    Java實(shí)現(xiàn)復(fù)雜的進(jìn)制轉(zhuǎn)換器功能示例

    這篇文章主要介紹了Java實(shí)現(xiàn)復(fù)雜的進(jìn)制轉(zhuǎn)換器功能,結(jié)合實(shí)例形式分析了java數(shù)學(xué)運(yùn)算的相關(guān)實(shí)現(xiàn)技巧,需要的朋友可以參考下
    2017-01-01
  • Myeclipse 2016下Aptana安裝教程

    Myeclipse 2016下Aptana安裝教程

    這篇文章主要為大家詳細(xì)介紹了Myeclipse 2016下Aptana安裝教程,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-05-05
  • 關(guān)于Java中的dozer對象轉(zhuǎn)換問題

    關(guān)于Java中的dozer對象轉(zhuǎn)換問題

    Dozer是Java?Bean到Java?Bean映射器,它以遞歸方式將數(shù)據(jù)從一個(gè)對象復(fù)制到另一個(gè)對象,這篇文章主要介紹了Java中的dozer對象轉(zhuǎn)換的操作方法,需要的朋友可以參考下
    2022-08-08
  • Java中的封裝、繼承和多態(tài),你真的都懂了嗎

    Java中的封裝、繼承和多態(tài),你真的都懂了嗎

    Java中的封裝、繼承和多態(tài)知識(shí)點(diǎn)是學(xué)習(xí)java必備的基礎(chǔ)知識(shí),看似簡單,真正理解起來還是有一定難度的,今天小編再次通過實(shí)例代碼給大家講解java 封裝繼承多態(tài)知識(shí),感興趣的朋友一起學(xué)習(xí)下吧
    2021-05-05

最新評(píng)論

安图县| 武定县| 鹤山市| 苏州市| 莎车县| 余江县| 朝阳区| 南雄市| 乌兰浩特市| 泸溪县| 司法| 富宁县| 靖江市| 故城县| 临邑县| 衡阳县| 盐亭县| 耿马| 安平县| 潢川县| 神农架林区| 普洱| 平顺县| 正镶白旗| 来凤县| 宜都市| 榕江县| 伊金霍洛旗| 泰顺县| 邹平县| 富川| 宝鸡市| 青河县| 黄平县| 安陆市| 连江县| 华容县| 庆安县| 台南市| 奎屯市| 即墨市|