Ⅰ java中如何將字元串"0xff"轉為byte型即把"0xff"轉為-1
java中將字元串"0xff「轉為byte型,使用強制轉換,如下代碼:
packagecom.qiu.lin.he;
publicclassCeShi{
publicstaticvoidmain(String[]args){
byteb=(byte)Integer.parseInt("0xff".substring(2),16);
System.out.println(b);//輸出-1
}
}
輸出結果為:
Ⅱ java中的byte有什麼作用
在今天,byte位元組就是一個八位元組,使用其它位數的機器都進了博物館。 java也提供了一個byte數據類型,並且是基本類型。java byte是做為最小的數字來處理的,因此它的值域被定義為-128~127,也就是signed byte。不幸的是,byte的用作計數的時間遠少於用表達基本內存單元的時間。比如從stream里讀入一個雙位元組字元,我們先收到2個byte。為了把byte轉換成適當的形式,需要對byte值做一些比較,比如判斷字元集要比較其是否在某個編碼范圍內,比如GBK 0x8140~0xFEFE,然後new適當的string。 signed byte 把 0x00 ~ 0xff 映射成 0~127 -128~-1 兩段,注意當與literal比較時,java自動將literal識別成int 可以用 下面的小程序來驗證: 1 public class JavaByte 2 { 3 public static void main(String[] args) 4 { 5 byte b = 0; 6 for ( int i = 0; i <= 0xff; ++i ) 7 { 8 b = (byte)i; 9 System.out.print(" "+i+":"+b+", "); 10 } 11 } 12 } 當收到(0xC7B0)這個GBK字元時,要判斷 0x81 <= 0xC7 <= 0xFE 是否成立,實際變成判斷 -127 < -57 < -2,唔,萬幸,可以直接比較 low < ch < high。如果要判斷 0x00 <= 0xC7 <= 0x80 (ASC Char),這回麻煩了,變成判斷 (0 <= -57 <= 127) || ( 0x57 == -128 )。比較簡單的辦法用 (b+256)%256的辦法令其值回到0~255,或者用&0xff並賦給一個int。考慮到jvm里的byte其實也是32位的,所以在計劃用byte的地方,直接用integer並不會有什麼實際的損失,而 DataInputStream也提供了一個readUnsignedByte()方法返回的是int。所以真正的解決方案是忘掉byte,直接上 int。至於為什麼java沒有unsigned數據類型,照下面這個interview里Jams Golsing的意思,應該是java應該簡單而unsigned算術過於復雜了會讓大多數程序員產生誤解誤用:
Ⅲ Java:轉16進制時常見的【byte[i] & 0xFF】是什麼意思呢
int v ; 這里不論你賦值給v什麼值,v都會是四個位元組的整數
所以,調用Integer.toHexString(v); 出來的還是32位的字元串
b[i] & 0xFF只是保證了v的前三個位元組是0,只有最後一個位元組有數
Ⅳ java中關於&運算符 和 0xFF 的問題
260的2進制為100000100 由於0xFF是位元組操作 高位的1已經超界,所以260在強轉成byte後高位的1會丟失。 也就是
00000100
&
11111111
=
00000100 轉換成2進制就是等於4
4跟什麼運算能等於260?
因為260已經大於127,也就是大於1個位元組所以這里在反推回去的時候不能在進行8位的位元組操作了 就必須用16位的字操作了
260的2進制是
100000100
4的2進制是
00000100
結果很明顯 只需與
100000000 按位取或運算就能得到260
也就是 4 | 0x0100
Ⅳ Java:關於byte轉16進制的& 0xFF,我的理解正確嗎
/**
*Convertbyte[]tohexstring.這里我們可以將byte轉換成int,然後利用Integer.toHexString(int)
*來轉換成16進制字元串。
*@paramsrcbyte[]data
*@returnhexstring
*/
(byte[]src){
StringBuilderstringBuilder=newStringBuilder("");
if(src==null||src.length<=0){
returnnull;
}
for(inti=0;i<src.length;i++){
intv=src[i]&0xFF;
Stringhv=Integer.toHexString(v);
if(hv.length()<2){
stringBuilder.append(0);
}
stringBuilder.append(hv);
}
returnstringBuilder.toString();
}
Ⅵ java中的byte有什麼作用
在今天,byte位元組就是一個八位元組,使用其它位數的機器都進了博物館。 java也提供了一個byte數據類型,並且是基本類型。java byte是做為最小的數字來處理的,因此它的值域被定義為-128~127,也就是signed byte。不幸的是,byte的用作計數的時間遠少於用表達基本內存單元的時間。比如從stream里讀入一個雙位元組字元,我們先收到2個byte。為了把byte轉換成適當的形式,需要對byte值做一些比較,比如判斷字元集要比較其是否在某個編碼范圍內,比如GBK 0x8140~0xFEFE,然後new適當的string。 signed byte 把 0x00 ~ 0xff 映射成 0~127 -128~-1 兩段,注意當與literal比較時,java自動將literal識別成int 可以用 下面的小程序來驗證: 1 public class JavaByte 2 { 3 public static void main(String[] args) 4 { 5 byte b = 0; 6 for ( int i = 0; i <= 0xff; ++i ) 7 { 8 b = (byte)i; 9 System.out.print(" "+i+":"+b+", "); 10 } 11 } 12 } 當收到(0xC7B0)這個GBK字元時,要判斷 0x81 <= 0xC7 <= 0xFE 是否成立,實際變成判斷 -127 < -57 < -2,唔,萬幸,可以直接比較 low < ch < high。如果要判斷 0x00 <= 0xC7 <= 0x80 (ASC Char),這回麻煩了,變成判斷 (0 <= -57 <= 127) || ( 0x57 == -128 )。比較簡單的辦法用 (b+256)%256的辦法令其值回到0~255,或者用&0xff並賦給一個int。考慮到jvm里的byte其實也是32位的,所以在計劃用byte的地方,直接用integer並不會有什麼實際的損失,而 DataInputStream也提供了一個readUnsignedByte()方法返回的是int。所以真正的解決方案是忘掉byte,直接上 int。至於為什麼java沒有unsigned數據類型,照下面這個interview里Jams Golsing的意思,應該是java應該簡單而unsigned算術過於復雜了會讓大多數程序員產生誤解誤用:
Ⅶ java中如何將字元串"0xff"轉為byte型即把"0xff"轉為-1
Stringstr="ff";
Integerin=Integer.valueOf(str,16);
Integer.valueOf就是干這事的,第二個參數就是告訴它是多少進制
Ⅷ java byte轉換成字元串
1、將byte數組轉換成字元
byte[] b={(byte)0xB8,(byte)0xDF,(byte)0xCB,(byte)0xD9};
String str= new String (b);
2、將字元轉換成byte數組
String str = "XXXX";
byte[] sb = str.getBytes();
Ⅸ java 位元組 & 0xFF 什麼意思, <=0xF又是什麼意思
問題1:16進制字元串的作用主要是便於查看,每個位元組必然是兩位字元。 如果不轉換的話,字付中很多都是不可見字元,可能導致顯示錯亂,甚至被系統錯誤的解碼。
問題2: 網上的寫法是2進制的。 這樣可以一眼看出對應的位的變化。而你的2010是10進制的。你需要手工轉成2進制才能很好的確認值。
問題3:0xff換成2進制就是8個1,這樣與的話,其實就是取到了字元的低8位。 oxf就是15, 小於15的數會轉換成一個16進制數,你的代碼里希望是固定的兩個16進制數,所以當只會產生一個時要加個0