關於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中:int和byte的互相轉換
一、基礎概念: 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
java中int與byte相互轉換
基礎內容簡介 在做轉換之前先要明確幾個簡單的概念。首先本文是以java為語言,以int為例子。 long資料型別在原理上是一致的。 1 int 在java中是32位, byte是8位。 2 原碼,反碼,補碼簡介
c#中 int和String互相轉換
1,int轉成string用toString 或者Convert.toString()如下 例如:int varInt = 1; string varString = Convert.ToString(varInt); string varString2 = varInt.
Java中int和Integer相互轉換
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=
Java中String和byte[]間的轉換淺析
Java語言中字串型別和位元組陣列型別相互之間的轉換經常發生,網上的分析及程式碼也比較多,本文將分析總結常規的byte[]和String間的轉換以及十六進位制String和byte[]間相互轉換的原理及實現。 1. String轉byte[] 首先我們來分析一下常規的Strin
java中int與byte,以及long與byte之間的轉換
轉載請註明出處! 做專案時候根據協議在傳送網路流的時候需要將所有int及long轉換成byte,因此寫了以下的轉換方法,希望能幫助到需要的朋友 ^_^ 閒話少說,直接上碼。 public cla
Java中字元和byte陣列之間的相互轉換
Java與其他語言編寫的程式進行tcp/ip socket通訊時,通訊內容一般都轉換成byte陣列型,java在字元與陣列轉換也是非常方便的; 1、將字元轉換成byte陣列 String str = "羅長"; byte[] sb = str.getBy
轉:Java中String與byte[]的轉換
輸出字符串 單個字符 linu 編輯 繁體 中國人 對象 本質 計算機基礎知識 String s = "fs123fdsa";//String變量 byte b[] = s.getBytes();//String轉換為byte[] String t = new Stri
java中List和Array相互轉換
一個 data element 分隔 -a common 內部類 iter lang List to Array List 提供了toArray的接口,所以可以直接調用轉為object型數組 List<String> list = new ArrayLis
c#中 xml和json 互相轉換
XML serialize AD -- ldo data nod load str --xml轉json XmlDocument doc = new XmlDocument(); doc.LoadXml(result); st
Java中Int轉byte分析
span 進行 二進制表示 size 二進制 light bsp 變量 byte[] 針對聲明變量 int i = 3,j = 8; int占4個字節,i = 3 在Java二進制表示: 00000000 00000000 00000000 000000
PHP中XML和陣列互相轉換的方法
轉換程式碼如下 //陣列轉XML function arrayToXml($arr) { $xml = "<xml>"; foreach ($arr as $key=>$val) {
java 資料map和json互相轉換
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
Java中int和integer的比較
Java中,數值型的建立和字串有類似的地方,Integer是Java為了使用物件的屬性和方法給int準備的型別。字串 String s = “bag”; 這樣建立會在常量池中查詢 bag,沒有的話就新建,並不會在堆裡新建。 同樣地,Integer i = 11;也不會在堆裡
java中int和integer的區別
1、Integer是int的包裝類,int則是java的一種基本資料型別 2、Integer變數必須例項化後才能使用,而int變數不需要 3、Integer實際是物件的引用,當new一個Integer時,實際上是生成一個指標指向此物件;而int則是直接儲存資料值
java實現String和byte[]的轉換
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<