int型別和byte型別的強制型別轉換
OKevin
GitBook:《探尋Java中的設計模式》
Mail:[email protected]
隨筆 - 130 文章 - 0 評論 - 83
int型別和byte型別的強制型別轉換
今天在讀《Java網路程式設計》這本書的第二章 流 時,看到書中有一個地方關於int強制轉換為byte型別時應注意的地方。這個地方有點細節,不過就應該把這種細節把握住。
情況是這樣的,講到InputStream的抽象方法read時,說到read返回一個int型,但實際是一個byte型的資料。這點從API也能考證。如圖:
那麼問題來了,int佔4個位元組,byte佔1個位元組,我們迴圈讀取的時候將int型陣列強制型別轉換成byte時,會發生什麼情況呢?程式碼如下:
1個位元組佔8位,既然實際返回的是byte型別的資料,那麼強制型別轉換int型擷取低8位,對資料也不會造成影響。問題就出現在,如果再從byte型轉換成int型呢?程式碼如下:
此時,j輸出為-106。
這是因為在int強制轉換為byte型資料時,會產生一個-128~127的有符號位元組,而不是read方法返回的0~255的無符號位元組。這個時候要注意程式碼應修改為:
一個小問題,重在積累。
相關推薦
int型別和byte型別的強制型別轉換
OKevin GitBook:《探尋Java中的設計模式》 Mail:[email protected] 部落格園 首頁 新隨筆 聯絡 訂閱 管理 隨筆 - 130 文章 - 0 評論 - 83
int 與 byte 的強制型別轉換
int佔4個位元組,32位 byte佔1個位元組,8位 所以強轉時會截斷前24位 在記憶體中表示形式( 注意java中是以補碼錶示一個數,所以表示形式是補碼,不是原碼! ): int a = 3; 00000000 000000
9、str型別和byte型別轉換、列表拾遺、元組拾遺、字典拾遺
str(位元組型別,編碼) 可用於建立字串,或者將其他的轉換成字串 a= ‘李露’ #將字串轉換成位元組流 b = bytes(a,encoding = 'utf-8') #將位元組轉換成字串 str(b,encoding = 'utf-8')&n
C# string型別和byte[]型別相互轉換
string型別轉成byte[]:byte[] byteArray = System.Text.Encoding.Default.GetBytes ( str );byte[]轉成string:string str = System.Text.Encoding.Defau
MySQL中int(M)和tinyint(M)數值型別中M值的意義
我們建立一個數據表test: mysql> CREATE TABLE test( -> id1 int(1), -> id2 tinyint(1) ->); 我們給id1定義為int,並設定字元長度為1,id2定
MySQL中int(M)和tinyint(M)數值型別中M值的意義(轉載)
首先,我們建立一個數據表test: mysql> CREATE TABLE test( -> id1 int(1), -> id2 tinyint(1) ->); 我們給id1定義為int,並設定字元長度為1,id2定義
mysql欄位型別和查詢語句資料型別的關係
mysql欄位型別和查詢語句資料型別的關係 實驗 根據資料庫儲存的欄位型別和查詢語句中的資料型別列出下表: 資料庫 查詢語句 結果 string string ①
Python學習【第4篇】:Python之可變資料型別與不可變資料型別 可變資料型別和不可變資料型別
可變資料型別和不可變資料型別 1.可變資料型別:在id不變的情況下,value可改變(列表和字典是可變型別,但是字典中的key值必須是不可變型別) 2.不可變資料型別:value改變,id也跟著改變。
C#深入學習:泛型修飾符in,out、逆變委託型別和協變委託型別
在C#中,存在兩個泛型修飾符:in和out,他們分別對應逆變委託和協變委託。 我們知道,在C#中要想將一個泛型物件轉換為另一個泛型物件時,必須要將一個泛型物件拆箱,對元素進行顯式或隱式轉換後重新裝箱。 例如: List<Object> lobject=new List<Object&
go語音基礎之字串型別 和 字元與字串型別的區別
1、字串型別 示例1: package main //必須有一個main包 import "fmt" func main() { var str1 string str1 = "abc" fmt.Println("str1 = ", str1) } #執行結果
js中的型別和函式引數傳遞型別問題
js中的型別: 2大型別:原始型別和物件。 原始型別有 boolean、number、string這三個普通原始型別,還有null、undefined這倆特殊原始型別 物件嘛就多了,普通物件、內建物件、全域性物件、函式、陣列等。 函式引數傳遞型別: 對於原始型別,傳遞的是值,
Java 的8種基本型別和3種引用型別
1、計算機的記憶體單位 計算機中的資料都是以 0 和 1 來表示的,其中一個 0 或者一個 1 稱之為一位 (bit)。 8位稱為一個位元組 (Byte),兩個位元組稱為一個字 (Word) ,四個位元組稱為雙字 (Dword)。 1Byt
Oracle資料型別和對應的java型別
地址: http://otndnld.oracle.co.jp/document/products/oracle10g/102/doc_cd/java.102/B19275-03/datacc.htm#BHCJBJCC SQL資料型別 JDBC型別程式碼 標準的
Java的基本資料型別和Java的變數型別
一、Java 基本資料型別 1、什麼是變數? 變數就是用來儲存值而保留的記憶體位置。這就意味著當你建立一個變數時就會在記憶體中佔用一定的空間。 基於變數的資料型別,作業系統會進行記憶體分配並且決定什麼將被儲存在保留記憶體中。因此,通過給變數分配不同的資料型別,你可以在這些變
圖片和base64編碼字符串 互相轉換,圖片和byte數組互相轉換
16進制 cnblogs exc 十六進制 tostring ati color int inpu 圖片和base64編碼字符串 互相轉換 import sun.misc.BASE64Decoder; import sun.misc.BASE64Encoder; imp
java File和Byte[]數組 相互轉換
rac ring eno print [] director mkdir int num public class Test { public static void main(String[] args){ String filePath
java整數和byte陣列之間的轉換
做的程式有時候會需要用到, 記錄下 public class NumberUtil { /** * int整數轉換為4位元組的byte陣列 * * @param i * 整數 * @return byte陣列 */ pub
java int型與byte陣列之間的轉換
public class NumberUtil { /** * int整數轉換為4位元組的byte陣列 * * @param i *
一道int和unsigned char之間強制型別轉換的題目
設有語句: ``` int a=258,b; unsigned char c; b=c=a; ``` 則b的值為___。 (答案:2) (一)int 型別和char型別之間強制型別轉換的規則 ```將int型別變數i的值賦給char型別變數c,會將i的值當作一
強制型別轉換(int)、(int&)和(int*)的區別
(int)x 強制型別轉換,是將浮點數x為引數構造整數(即float轉換為int) (int &)y 則是告訴編譯器將y看成int對待(記憶體裡的資料不做任何轉換),所以(int &)x值為1071 644 672。 至於(int*)的話,我就不多說啦,就是