另外还有一个比较简单的转换方法,使用的是ByteBuffer类(涉及到一个大端小端问题)出处:
import java.nio.ByteBuffer; import java.nio.ByteOrder; import java.nio.charset.Charset; import java.util.Arrays; public class BigByteUtil { /** * short 转 byte[] * 大端 * @param data * @return */ public static byte[] getShortBytes(short data) { ByteBuffer buffer = ByteBuffer.allocate(2); buffer.order(ByteOrder.BIG_ENDIAN); buffer.putShort(data); return buffer.array(); } /** * chart 转 byte[] * 大端 * @param data * @return */ public static byte[] getCharBytes(char data) { ByteBuffer buffer = ByteBuffer.allocate(2); buffer.order(ByteOrder.BIG_ENDIAN); buffer.putChar(data); return buffer.array(); } /** * int 转 byte[] * 大端 * @param data * @return */ public static byte[] getIntBytes(int data) { ByteBuffer buffer = ByteBuffer.allocate(4); buffer.order(ByteOrder.BIG_ENDIAN); buffer.putInt(data); return buffer.array(); } /** * long 转 byte[] * 大端 * @param data * @return */ public static byte[] getLongBytes(long data) { ByteBuffer buffer = ByteBuffer.allocate(8); buffer.order(ByteOrder.BIG_ENDIAN); buffer.putLong(data); return buffer.array(); } /** * float 转 byte[] * 大端 * @param data * @return */ public static byte[] getFloatBytes(float data) { ByteBuffer buffer = ByteBuffer.allocate(4); buffer.order(ByteOrder.BIG_ENDIAN); buffer.putFloat(data); return buffer.array(); } /** * double 转 byte[] * 大端 * @param data * @return */ public static byte[] getDoubleBytes(double data) { ByteBuffer buffer = ByteBuffer.allocate(8); buffer.order(ByteOrder.BIG_ENDIAN); buffer.putDouble(data); return buffer.array(); } /** * String 转 byte[] * * @param data * @param charsetName * @return */ public static byte[] getStringBytes(String data, String charsetName) { Charset charset = Charset.forName(charsetName); return data.getBytes(charset); } /** * String 转 byte[] * * @param data * @return */ public static byte[] getStringBytes(String data) { byte[] bytes = null; if(data != null){ bytes = data.getBytes(); }else{ bytes = new byte[0]; } return bytes; } /*****************************************************************************************************************************/ /** * byte[] 转short * 大端 * @param bytes * @return */ public static short getShort(byte[] bytes) { ByteBuffer buffer = ByteBuffer.allocate(bytes.length); buffer.order(ByteOrder.BIG_ENDIAN); buffer.put(bytes); return buffer.getShort(0); } /** * byte[] 转 char * 大端 * @param bytes * @return */ public static char getChar(byte[] bytes) { ByteBuffer buffer = ByteBuffer.allocate(bytes.length); buffer.order(ByteOrder.BIG_ENDIAN); buffer.put(bytes); return buffer.getChar(0); } /** * byte[] 转 int * 大端 * @param bytes * @return */ public static int getInt(byte[] bytes) { ByteBuffer buffer = ByteBuffer.allocate(bytes.length); buffer.order(ByteOrder.BIG_ENDIAN); buffer.put(bytes); return buffer.getInt(0); } /** * byte[] 转 long * * @param bytes * @return */ public static long getLong(byte[] bytes) { ByteBuffer buffer = ByteBuffer.allocate(bytes.length); buffer.order(ByteOrder.BIG_ENDIAN); buffer.put(bytes); return buffer.getLong(0); } /** * byte[] 转 float * * @param bytes * @return */ public static float getFloat(byte[] bytes) { ByteBuffer buffer = ByteBuffer.allocate(bytes.length); buffer.order(ByteOrder.BIG_ENDIAN); buffer.put(bytes); return buffer.getFloat(0); } /** * byte[] 转 double * * @param bytes * @return */ public static double getDouble(byte[] bytes) { ByteBuffer buffer = ByteBuffer.allocate(bytes.length); buffer.order(ByteOrder.BIG_ENDIAN); buffer.put(bytes); return buffer.getDouble(0); } /** * byte[] 转 String * * @param bytes * @param charsetName * @return */ public static String getString(byte[] bytes, String charsetName) { return new String(bytes, Charset.forName(charsetName)); } /** * byte[] 转 String * * @param bytes * @return */ public static String getString(byte[] bytes) { return new String(bytes); } public static void main(String[] args){ String str = "0123456789abcde"; long l = 6699; int i = 2233; short s = Short.MAX_VALUE; char c = 'c'; System.out.println("?转byte[]=" + Arrays.toString(getCharBytes(c))); System.out.println("byte[]转?=" + getChar(getCharBytes(c))); } }因为项目需要,对数据类型与byte[]进行互转,所以最新学习了总结了一下。以上方法测试没有问题(16进制字符串的转换有点问题),不过在此有一个问题想了一天也没想通,希望哪位大神看见了解答一下(感谢^_^): 在用以上16进制字符串转byte[ ]时,string长度为偶数时没问题,但如果string长度为奇数,则转过来的byte[ ]会少一个字节,反转也会少一个字符,因为for循环中使用的长度是string的长度,又因长度是int型,除2会直接取整,所以导致少循环了一次,截取时是截取的两个,在长度为偶数时就算少循环一次也正好可以截取完数据,所以导致在长度为偶数时没问题,长度为奇数时就会少一个字节或字符。而我百度到的转换全都是这样的,搞得我有点蒙圈。
