1. 程式人生 > >關於JAVA中:int和byte的互相轉換

關於JAVA中:int和byte的互相轉換

一、基礎概念:

1.原碼:

一個byte是一個位元組,一個位元組是由8個位組成。其中最高位是符號位,範圍就是127 ~ -128。

即:0111 1111~1111 1111

也就是說:0000 0001 代表的是1,

   1000 0000 代表的是-128。
2.反碼:

正數的反碼是其本身(正數的符號位是0);

負數的反碼是:在原碼的基礎上,符號位不變,其他位取反。(負數的符號位是1)

即:-128的原碼是:1000 0000

反碼是:1111 1111

3.補碼:

補碼是在原碼的基礎上,符號位不變,其他位取反+1。

例如: 1的原碼是:0000 0001
   反碼是:0000 0001

符號位不變,取反:  0111 1111

+1(逢二進一)
   補碼是:1111 1111

二、將byte轉換為int:

首先:一個int有4個八位,也就是4個位元組。
1.如果我們要講一個byte[]陣列轉換為int型別:

首先看如下程式碼:

	/**
	 * byte陣列轉int型別的物件
	 * @param bytes
	 * @return
	 */
	public int Byte2Int(Byte[]bytes) {
		return (bytes[0]&0xff)<<24
			| (bytes[1]&0xff)<<16
			| (bytes[2]&0xff)<<8
			| (bytes[3]&0xff);
	}

因為一個byte是八位,int有四個八位,所以將這個byte[0]左移24位,就將這個byte[0]放在了int的最高一個八位上。

同理,byte[1]放置在第二個八位上,byte[2]放置在第三個八位上,byte[3]放置在第四個八位上。

2.問題:為什麼要&0xff

首先0xff是十六進位制的255,也就是二進位制的1111 1111,對0xff取與,實際上就是要取這個數最低八位的值,截一個位元組的長度。

如果不用&0xff:

①計算機中是用補碼的方式進行儲存資料。

②如果不用&0xff,那麼在進行負數的運算時就會出現問題,如:使用-1進行運算,-1的byte補碼是:1111 1111,對應的十六進位制數字是0xff;

                           -1的int補碼(32位)是1111 1111 1111 1111 1111 1111,如果將byte轉換為int,那麼對應的十六進位制數是0xffff。

結果不正確(對於負數而言)。

所以為了計算結果的正確性,我們就要對位元組進行&0xff操作。

三、將int轉換為byte[ ]:

只需要進行相反的方向操作就好:

	/**
	 * int轉byte陣列
	 * @param bytes
	 * @return
	 */
	public byte[]IntToByte(int num){
		byte[]bytes=new byte[4];
		bytes[0]=(byte) ((num>>24)&0xff);
		bytes[1]=(byte) ((num>>16)&0xff);
		bytes[2]=(byte) ((num>>8)&0xff);
		bytes[3]=(byte) (num&0xff);
		return bytes;
	}

這樣就完成了int和byte之間的互相轉換。

相關推薦

關於JAVA:intbyte互相轉換

一、基礎概念: 1.原碼: 一個byte是一個位元組,一個位元組是由8個位組成。其中最高位是符號位,範圍就是127 ~ -128。 即:0111 1111~1111 1111 也就是說:0000 0001 代表的是1,    1000 0000 代表的是-128

Java物件json互相轉換的工具類

package com.Dingyu.util; import java.util.List; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.JavaT

javaintbyte相互轉換

基礎內容簡介      在做轉換之前先要明確幾個簡單的概念。首先本文是以java為語言,以int為例子。 long資料型別在原理上是一致的。      1  int 在java中是32位, byte是8位。      2  原碼,反碼,補碼簡介        

c# intString互相轉換

1,int轉成string用toString 或者Convert.toString()如下 例如:int varInt = 1; string varString = Convert.ToString(varInt); string varString2 = varInt.

JavaintInteger相互轉換

      Java是一種面嚮物件語言,為了能將基本型別視為物件來處理,並能連線相關的方法,Java為每個基本資料型別都提供了包裝類,這樣便可以把這些基本型別轉化為物件來處理。 基本資料型別及對應的包裝類 基本資料型別 包裝類 基本資料型別 包裝類 boolean Boo

java image byte[] 相互轉換

只需要一個儲存了圖片資訊的二進位制串(byte[])然後,這樣:InputStream buffin = new ByteArrayInputStream(/*二進位制串*/, /*起始位置*/,/*二進位制串長度*/)); BufferedImage img = Image

Java字串byte陣列之間的相互轉換

1、將字元轉換成byte陣列 String str = "羅長"; byte[] sb = str.getBytes(); 2、將byte陣列轉換成字元 byte[] b={(byte)0xB8,(byte)0xDF,(byte)0xCB,(byte)0xD9}; String str=

JavaStringbyte[]間的轉換淺析

Java語言中字串型別和位元組陣列型別相互之間的轉換經常發生,網上的分析及程式碼也比較多,本文將分析總結常規的byte[]和String間的轉換以及十六進位制String和byte[]間相互轉換的原理及實現。 1. String轉byte[] 首先我們來分析一下常規的Strin

javaintbyte,以及long與byte之間的轉換

轉載請註明出處! 做專案時候根據協議在傳送網路流的時候需要將所有int及long轉換成byte,因此寫了以下的轉換方法,希望能幫助到需要的朋友 ^_^ 閒話少說,直接上碼。 public cla

Java字元byte陣列之間的相互轉換

Java與其他語言編寫的程式進行tcp/ip socket通訊時,通訊內容一般都轉換成byte陣列型,java在字元與陣列轉換也是非常方便的; 1、將字元轉換成byte陣列      String  str = "羅長";     byte[] sb = str.getBy

轉:JavaString與byte[]的轉換

輸出字符串 單個字符 linu 編輯 繁體 中國人 對象 本質 計算機基礎知識 String s = "fs123fdsa";//String變量 byte b[] = s.getBytes();//String轉換為byte[] String t = new Stri

javaListArray相互轉換

一個 data element 分隔 -a common 內部類 iter lang List to Array   List 提供了toArray的接口,所以可以直接調用轉為object型數組 List<String> list = new ArrayLis

c# xmljson 互相轉換

XML serialize AD -- ldo data nod load str --xml轉json XmlDocument doc = new XmlDocument(); doc.LoadXml(result); st

JavaIntbyte分析

span 進行 二進制表示 size 二進制 light bsp 變量 byte[]   針對聲明變量 int i = 3,j = 8;    int占4個字節,i = 3 在Java二進制表示:      00000000 00000000 00000000 000000

PHPXML陣列互相轉換的方法

轉換程式碼如下 //陣列轉XML function arrayToXml($arr) { $xml = "<xml>"; foreach ($arr as $key=>$val) {

java 資料mapjson互相轉換

import java.util.HashMap; import java.util.Map; import java.util.Map.Entry; import net.sf.json.JSON; import net.sf.json.JSONObject; import com.googl

Javaintinteger的比較

Java中,數值型的建立和字串有類似的地方,Integer是Java為了使用物件的屬性和方法給int準備的型別。字串 String s = “bag”; 這樣建立會在常量池中查詢 bag,沒有的話就新建,並不會在堆裡新建。 同樣地,Integer i = 11;也不會在堆裡

javaintinteger的區別

1、Integer是int的包裝類,int則是java的一種基本資料型別 2、Integer變數必須例項化後才能使用,而int變數不需要 3、Integer實際是物件的引用,當new一個Integer時,實際上是生成一個指標指向此物件;而int則是直接儲存資料值

java實現Stringbyte[]的轉換

String s = "easonjim";//String變數 byte b[] = s.getBytes();//String轉換為byte[] String t = new String(b);//bytep[]轉換為String,支援傳遞編碼 1、

mysql字串時間互相轉換的方法(自動轉換及DATE_FORMAT函式)

mysql中字串和時間互相轉換的方法(自動轉換及DATE_FORMAT函式) 一、mysql中字串轉換成日期 下面將講述如何在MYSQL中把一個字串轉換成日期: 1、無需轉換的:  SELECT * FROM tairlist_day WHERE rq>'2010-07-31' AND rq<