byte,int,char,double的相互转换(java)

上一篇 / 下一篇  2007-10-10 17:55:44

byte,int,char,double的相互转换(java)51Testing软件测试网%wO g:]B eL_9e2x

最近在学习一些SOCKET通讯协议设计的知识,涉及到了一些协议的设计,需要打包和解包,所以把一些比较基本的知识搜集了下来.

mfR#H2RqnQMF051Testing软件测试网 `!U"i?'cI Q8@

暂时把协议结构定义得比较简单,也就是 CMD(命令类型8位)+序号(整形16位)+接收人长度(整形16位)+消息内容(每个包只接收1024位消息内容,多余的需要分割);下面是需要用到的一些方法.

\$G{V/},ZQ@i,W"J0

%` XX4@^!S]0//整数到字节数组的转换
PZA(P?f0   public byte[] intToByte(int intValue) {
2} ^8V G `0    byte[] result = new byte[4];51Testing软件测试网CLacb/jF#C
    result[0] = (byte) ( (intValue & 0xFF000000) >> 24);
`Qp2I3m0pm|0    result[1] = (byte) ( (intValue & 0x00FF0000) >> 16);51Testing软件测试网*W*a#[p8Y LX*cY
    result[2] = (byte) ( (intValue & 0x0000FF00) >> 8);51Testing软件测试网TT qN9N_ k
    result[3] = (byte) ( (intValue & 0x000000FF));
YK9L r9{9M0    return result;51Testing软件测试网^"o1F k,x9f[6s
  }51Testing软件测试网3}0|^M2unW8Q Y

51Testing软件测试网3h8AM0dnz

  //字节数组到整数的转换
k Yjr(c0  public static int byteToInt(byte[] b) {
W Q1XtOsj2G%K0public static int byteToInt(byte[] byteVal) {51Testing软件测试网(m Yzq$]u4s8U$F
      int result = 0;
:W0a)T.|\8?"r0      for (int i = 0; i < byteVal.length; i++) {
c:A|#g-w"r&H0        int tmpVal = (byteVal[i] << (8 * (3 - i)));
*nj*Ig.v%WT6d2c0        switch (i) {51Testing软件测试网;J2y JjgL^9q(Y/L
          case 0:
5a'y d$B;E~~P9z0            tmpVal = tmpVal & 0xFF000000;51Testing软件测试网#z:r x9NN|s
            break;
6H,Bj[8w+Xggi1P0          case 1:
e(]BN _%^(E1r \ ^0            tmpVal = tmpVal & 0x00FF0000;51Testing软件测试网0P]q Sbi!?
            break;51Testing软件测试网-y,}t\;FK.Z?
          case 2:
9S`@5EjD5s#A$Dr.q8]0            tmpVal = tmpVal & 0x0000FF00;
e9xJ0Nk Io*S~T1LZO0            break;
J(g#R5W;nu0          case 3:51Testing软件测试网"s4cE [ y rev$B,k f
            tmpVal = tmpVal & 0x000000FF;51Testing软件测试网*U ]0w5r"hd
            break;51Testing软件测试网c ~gt F#YI'`
        }51Testing软件测试网K^9X,YcV \^
        result = result | tmpVal;51Testing软件测试网L+?1h i)MKY;S
      }51Testing软件测试网'@)qD#U h:u:ya/M0[
      return result;51Testing软件测试网 MbK8C)R r:W0eR:a,a
    }

&I\ J Eg(c&u0

y%c&Ai-\ n w0  //字符到字节转换51Testing软件测试网&d-O6| x[.@ge o
  public static byte[] charToByte(char ch){
#{c/sWg5ZMW0    int temp=(int)ch;51Testing软件测试网![@AmB/s
    byte[] b=new byte[2];
C-r}H3}0    for (int i=b.length-1;i>-1;i--){51Testing软件测试网/n0w"FEI"B-~b
      b = new Integer(temp&0xff).byteValue();      //将最高位保存在最低位51Testing软件测试网2M$QJ b-Yef
      temp = temp >> 8;       //向右移8位
t"LG n1?`0    }51Testing软件测试网 V*AW?&N"[h/d
    return b;
"w'w&gZ a6U0  }

A1G@sxI,Bh.~4q051Testing软件测试网c)f-N ]*qEr)S

  //字节到字符转换
,Y;z)t1e B;rz G0  public static char byteToChar(byte[] b){
-d|(K3A#Wu;a"U)Z5B0    int s=0;
f:Q~W$gsz#Y0    if(b[0]>0)51Testing软件测试网Kw/yo"go
      s+=b[0];51Testing软件测试网;[ I9ek+z6C5x
    else
}S'Q0i \(r0      s+=256+b[0];
9l\&p3@~ K N,NR0    s*=256;
4Th(ebyi.KZ"s~0    if(b[1]>0)51Testing软件测试网edD!?/?].P+k
      s+=b[1];
WM-em]_1q0    else51Testing软件测试网%kQ srp+a*G
      s+=256+b[1];51Testing软件测试网/oQEsM {+v
    char ch=(char)s;51Testing软件测试网I^2W+a2o X
    return ch;51Testing软件测试网 A+J HG$Sb pL
  }51Testing软件测试网^2u`\ {\7K%i

@gBFhu*y0  //浮点到字节转换
va:\/r\'gd2NP0  public static byte[] doubleToByte(double d){
6y9q%I+B/h0    byte[] b=new byte[8];51Testing软件测试网)Ox l4_(Xt%z5J
    long l=Double.doubleToLongBits(d);51Testing软件测试网'Y2[p)]Z c3S-n7V
    for(int i=0;i<b.length;i++){51Testing软件测试网MjCN G/M-Ek
      b=new Long(l).byteValue();
,a:@PM }rV0      l=l>>8;
)TFQ^"T0    }
K.hs#T,JS Nej0    return b;
nNY6T mw/eJ0  }

-Q0jn.Ej{0P0

.rt$S,~x0  //字节到浮点转换
DTesa/a0  public static double byteToDouble(byte[] b){
k+J*T XR({0    long l;51Testing软件测试网/^Qx9S0LpC

51Testing软件测试网zIlLJ3A4y$U0nu

    l=b[0];51Testing软件测试网A$|YroJFi
    l&=0xff;51Testing软件测试网wLu`8G+E@HE
    l|=((long)b[1]<<8);51Testing软件测试网1L(t6y&L~9C
    l&=0xffff;
%|4b*@|_7]+kC0    l|=((long)b[2]<<16);
oNP9~[-Nc0    l&=0xffffff;51Testing软件测试网"pz.E#DB+n Q W q
    l|=((long)b[3]<<24);
3c/T.C)?g8j h L/^0    l&=0xffffffffl;51Testing软件测试网Z0Y{^;rU f
    l|=((long)b[4]<<32);
D{;x$_K i%B,H%q,w e0    l&=0xffffffffffl;

V/TV9@iH9V051Testing软件测试网+kT u@d/}"m

    l|=((long)b[5]<<40);51Testing软件测试网e~ R}0P/U"ty5tA:s*\
    l&=0xffffffffffffl;51Testing软件测试网HlV"_l%@#d)t
    l|=((long)b[6]<<48);51Testing软件测试网;DU5{3TJ k
    l&=0xffffffffffffffl;
H*v|$Ei u7o$d%C/F0    l|=((long)b[7]<<56);51Testing软件测试网.`}L-K8A4S3dU
    return Double.longBitsToDouble(l);51Testing软件测试网~Zkn?0cW(a
  }51Testing软件测试网tqKhG*^RV V


TAG:

 

评分:0

我来说两句

日历

« 2023-02-18  
   1234
567891011
12131415161718
19202122232425
262728    

数据统计

  • 访问量: 30262
  • 日志数: 33
  • 图片数: 3
  • 文件数: 8
  • 建立时间: 2007-10-10
  • 更新时间: 2011-06-28

RSS订阅

Open Toolbar