国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計 > 正文

整型變量與字節(jié)數(shù)組的相互轉(zhuǎn)換

2019-11-18 14:54:38
字體:
供稿:網(wǎng)友

    前些天讀寫socket的時候碰到一種轉(zhuǎn)換,要在int型變量和字節(jié)數(shù)組之間進行轉(zhuǎn)換 (唉~公司定義的數(shù)據(jù)包)。As is known to all,java里邊int是4字節(jié)存儲的,于是乎想到了用移位操作來實現(xiàn),同樣也可以用移位操作將字節(jié)數(shù)組還原成int變量。

具體代碼如下:
-----------------------------------------------------------------------------

/*
 * Created on 2004-11-5
 *
 * TODO To change the template for this generated file go to
 * Window - PReferences - Java - Code Style - Code Templates
 */
package converter;

/**
 * @author NetSniffer
 *
 * TODO To change the template for this generated type comment go to
 * Window - Preferences - Java - Code Style - Code Templates
 */
public class IntByteConvertor {
 
 public static byte[] int2Byte(int intValue){
  byte[] b=new byte[4];
  for(int i=0;i<4;i++){
   b[i]=(byte)(intValue>>8*(3-i) & 0xFF);
   //System.out.print(Integer.toBinaryString(b[i])+" ");
   //System.out.print((b[i]& 0xFF)+" ");
  }
  return b;
 }
 public static int byte2Int(byte[] b){
  int intValue=0;
  for(int i=0;i<b.length;i++){
   intValue +=(b[i] & 0xFF)<<(8*(3-i));
   //System.out.print(Integer.toBinaryString(intValue)+" ");
  }
  return intValue;
 }
 public static void main(String[] args) {
  System.out.println(byte2Int(int2Byte(1000)));
 }
}

----------------------------------------------------------------------------------

    JAVA里邊對于byte變量,假如操作中有int操作數(shù),默認(rèn)會將byte隱式轉(zhuǎn)換為int變量,而轉(zhuǎn)換成的int變量高24位全部為1, 比如 1000 的四個字節(jié)是 0x00H, 0x00H,  0x03H, 0xE8 , 轉(zhuǎn)換后存到字節(jié)數(shù)組中是完全正確的;不過逐個打印出來的時候,會隱式轉(zhuǎn)換為int ,如下
0x00000000H , 0x00000000H, 0xFFFFFF03H, 0xFFFFFFE8,  顯示出來就是 0 , 0 , 3, -24

    接下來,在將byte數(shù)組轉(zhuǎn)換為int變量的時候,假如直接用移位操作就會有麻煩,因為高位都是FFFFFF,所以需將隱式轉(zhuǎn)換生成的FFFFFF消掉,有一招就是每個字節(jié)和0xFF相與,然后再移位,最后把各步產(chǎn)生的結(jié)果相加得到原始的int變量。

int轉(zhuǎn)換為字節(jié)數(shù)組的我就不細(xì)說了,這里把字節(jié)數(shù)組轉(zhuǎn)換為int的過程列出來

如下所示: 【1000 為例】
============================================================

原字節(jié)數(shù)組 : 0x00H, 0x00H,  0x03H, 0xE8
進行位運算的時候隱式轉(zhuǎn)換為int : 0x00000000H , 0x00000000H, 0xFFFFFF03H, 0xFFFFFFE8

1.  0x00000000H  與0xFF相與=> 0x00000000H   =>左移24位 =>   0x00000000H 
2.  0x00000000H  與0xFF相與=> 0x00000000H   =>左移16位 =>   0x00000000H 
3.  0xFFFFFF03H 與0xFF相與=> 0x00000003H  => 左移8位 =>    0x00000300H 
4.  0xFFFFFFE8H 與0xFF相與=> 0x000000E8H  => 左移0位 =>    0x000000E8H 

將1,2,3,4 所得結(jié)果相加就是我們的int變量了
結(jié)果:0x000003E8H ==> 十進制 1000
=====================================================

呵呵,就是這樣搞定的!



發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 阿拉善右旗| 罗定市| 邵东县| 镇沅| 高邮市| 土默特左旗| 灵山县| 丰城市| 历史| 客服| 如东县| 四川省| 德令哈市| 九寨沟县| 海兴县| 固阳县| 苏尼特左旗| 仪征市| 栾城县| 随州市| 通化县| 呈贡县| 达拉特旗| 丹巴县| 通州区| 南宁市| 长寿区| 鄂托克前旗| 如皋市| 普定县| 岚皋县| 涟水县| 合山市| 金寨县| 麻城市| 磐安县| 读书| 罗田县| 昂仁县| 汤阴县| 柞水县|