Java字节序

匿名 (未验证) 提交于 2019-12-02 21:40:30
/** * 通信格式转换 * * Java和一些windows编程语言如c、c++、delphi所写的网络程序进行通讯时,需要进行相应的转换 * 高、低字节之间的转换 * windows的字节序为低字节开头 * linux,unix的字节序为高字节开头 * java则无论平台变化,都是高字节开头   */   public class FormatTransfer { /**   * 将int转为低字节在前,高字节在后的byte数组   * @param n int   * @return byte[]   */ public static byte[] toLH(int n) {   byte[] b = new byte[4];   b[0] = (byte) (n & 0xff);   b[1] = (byte) (n >> 8 & 0xff);   b[2] = (byte) (n >> 16 & 0xff);   b[3] = (byte) (n >> 24 & 0xff);   return b; }   /**   * 将int转为高字节在前,低字节在后的byte数组   * @param n int   * @return byte[]   */ public static byte[] toHH(int n) {   byte[] b = new byte[4];   b[3] = (byte) (n & 0xff);   b[2] = (byte) (n >> 8 & 0xff);   b[1] = (byte) (n >> 16 & 0xff);   b[0] = (byte) (n >> 24 & 0xff);   return b; }   /**   * 将short转为低字节在前,高字节在后的byte数组   * @param n short   * @return byte[]   */ public static byte[] toLH(short n) {   byte[] b = new byte[2];   b[0] = (byte) (n & 0xff);   b[1] = (byte) (n >> 8 & 0xff);   return b; }   /**   * 将short转为高字节在前,低字节在后的byte数组   * @param n short   * @return byte[]   */ public static byte[] toHH(short n) {   byte[] b = new byte[2];   b[1] = (byte) (n & 0xff);   b[0] = (byte) (n >> 8 & 0xff);   return b; }   /**   * 将将int转为高字节在前,低字节在后的byte数组   public static byte[] toHH(int number) {   int temp = number;   byte[] b = new byte[4];   for (int i = b.length - 1; i > -1; i--) {     b = new Integer(temp & 0xff).byteValue();     temp = temp >> 8;   }   return b; }   public static byte[] IntToByteArray(int i) {     byte[] abyte0 = new byte[4];     abyte0[3] = (byte) (0xff & i);     abyte0[2] = (byte) ((0xff00 & i) >> 8);     abyte0[1] = (byte) ((0xff0000 & i) >> 16);     abyte0[0] = (byte) ((0xff000000 & i) >> 24);     return abyte0; }   */   /**   * 将float转为低字节在前,高字节在后的byte数组   */ public static byte[] toLH(float f) {   return toLH(Float.floatToRawIntBits(f)); }   /**   * 将float转为高字节在前,低字节在后的byte数组   */ public static byte[] toHH(float f) {   return toHH(Float.floatToRawIntBits(f)); }   /**   * 将String转为byte数组   */ public static byte[] stringToBytes(String s, int length) {   while (s.getBytes().length < length) {     s += " ";   }   return s.getBytes(); }   /**   * 将字节数组转换为String   * @param b byte[]   * @return String   */ public static String bytesToString(byte[] b) {   StringBuffer result = new StringBuffer("");   int length = b.length;   for (int i=0; i<length; i++) {     result.append((char)(b & 0xff));   }   return result.toString(); }   /**   * 将字符串转换为byte数组   * @param s String   * @return byte[]   */ public static byte[] stringToBytes(String s) {   return s.getBytes(); }   /**   * 将高字节数组转换为int   * @param b byte[]   * @return int   */ public static int hBytesToInt(byte[] b) {   int s = 0;   for (int i = 0; i < 3; i++) {     if (b >= 0) {     s = s + b;     } else {     s = s + 256 + b;     }     s = s * 256;   }   if (b[3] >= 0) {     s = s + b[3];   } else {     s = s + 256 + b[3];   }   return s; }   /**   * 将低字节数组转换为int   * @param b byte[]   * @return int   */ public static int lBytesToInt(byte[] b) {   int s = 0;   for (int i = 0; i < 3; i++) {     if (b[3-i] >= 0) {     s = s + b[3-i];     } else {     s = s + 256 + b[3-i];     }     s = s * 256;   }   if (b[0] >= 0) {     s = s + b[0];   } else {     s = s + 256 + b[0];   }   return s; }   /**   * 高字节数组到short的转换   * @param b byte[]   * @return short   */ public static short hBytesToShort(byte[] b) {   int s = 0;   if (b[0] >= 0) {     s = s + b[0];     } else {     s = s + 256 + b[0];     }     s = s * 256;   if (b[1] >= 0) {     s = s + b[1];   } else {     s = s + 256 + b[1];   }   short result = (short)s;   return result; }   /**   * 低字节数组到short的转换   * @param b byte[]   * @return short   */ public static short lBytesToShort(byte[] b) {   int s = 0;   if (b[1] >= 0) {     s = s + b[1];     } else {     s = s + 256 + b[1];     }     s = s * 256;   if (b[0] >= 0) {     s = s + b[0];   } else {     s = s + 256 + b[0];   }   short result = (short)s;   return result; }   /**   * 高字节数组转换为float   * @param b byte[]   * @return float   */ public static float hBytesToFloat(byte[] b) {   int i = 0;   Float F = new Float(0.0);   i = ((((b[0]&0xff)<<8 | (b[1]&0xff))<<8) | (b[2]&0xff))<<8 | (b[3]&0xff);   return F.intBitsToFloat(i); }   /**   * 低字节数组转换为float   * @param b byte[]   * @return float   */ public static float lBytesToFloat(byte[] b) {   int i = 0;   Float F = new Float(0.0);   i = ((((b[3]&0xff)<<8 | (b[2]&0xff))<<8) | (b[1]&0xff))<<8 | (b[0]&0xff);   return F.intBitsToFloat(i); }   /**   * 将byte数组中的元素倒序排列   */ public static byte[] bytesReverseOrder(byte[] b) {   int length = b.length;   byte[] result = new byte[length];   for(int i=0; i<length; i++) {     result[length-i-1] = b;   }   return result; }   /**   * 打印byte数组   */ public static void printBytes(byte[] bb) {   int length = bb.length;   for (int i=0; i<length; i++) {     System.out.print(bb + " ");   }   System.out.println(""); }   public static void logBytes(byte[] bb) {   int length = bb.length;   String out = "";   for (int i=0; i<length; i++) {     out = out + bb + " ";   }   }   /**   * 将int类型的值转换为字节序颠倒过来对应的int值   * @param i int   * @return int   */ public static int reverseInt(int i) {   int result = FormatTransfer.hBytesToInt(FormatTransfer.toLH(i));   return result; }   /**   * 将short类型的值转换为字节序颠倒过来对应的short值   * @param s short   * @return short   */ public static short reverseShort(short s) {   short result = FormatTransfer.hBytesToShort(FormatTransfer.toLH(s));   return result; }   /**   * 将float类型的值转换为字节序颠倒过来对应的float值   * @param f float   * @return float   */ public static float reverseFloat(float f) {   float result = FormatTransfer.hBytesToFloat(FormatTransfer.toLH(f));   return result; }   }
http://origin100.iteye.com/blog/267165

转载于:https://my.oschina.net/itfanr/blog/195687

文章来源: https://blog.csdn.net/weixin_34060299/article/details/91799484
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!