知乎专栏 |
byte[] bytes = "Helloworld!!! - http://www.netkiller.cn".getBytes(); String str = new String(bytes, StandardCharsets.UTF_8); System.out.println(str);
int a= 120; byte b= (byte)a;
private byte[] bigIntToByteArray( final int i ) { BigInteger bigInt = BigInteger.valueOf(i); return bigInt.toByteArray(); }
private byte[] intToByteArray ( final int i ) throws IOException { ByteArrayOutputStream bos = new ByteArrayOutputStream(); DataOutputStream dos = new DataOutputStream(bos); dos.writeInt(i); dos.flush(); return bos.toByteArray(); }
private byte[] intToBytes( final int i ) { ByteBuffer bb = ByteBuffer.allocate(4); bb.putInt(i); return bb.array(); }
位移操作
private static byte[] intToBytes(final int a) { return new byte[] { (byte)((data >> 24) & 0xff), (byte)((data >> 16) & 0xff), (byte)((data >> 8) & 0xff), (byte)((data >> 0) & 0xff), }; }
private int convertByteArrayToInt(byte[] intBytes){ ByteBuffer byteBuffer = ByteBuffer.wrap(intBytes); return byteBuffer.getInt(); }
private int convertByteArrayToInt(byte[] data) { if (data == null || data.length != 4) return 0x0; // ---------- return (int)( // NOTE: type cast not necessary for int (0xff & data[0]) << 24 | (0xff & data[1]) << 16 | (0xff & data[2]) << 8 | (0xff & data[3]) << 0 ); }
public static byte[] intToByte32(int num) { byte[] arr = new byte[32]; for (int i = 31; i >= 0; i--) { // &1 也可以改为num&0x01,表示取最地位数字. arr[i] = (byte) (num & 1); // 右移一位. num >>= 1; } return arr; } public static int byte32ToInt(byte[] arr) { if (arr == null || arr.length != 32) { throw new IllegalArgumentException("byte数组必须不为空,并且长度是32!"); } int sum = 0; for (int i = 0; i < 32; ++i) { sum |= (arr[i] << (31 - i)); } return sum; }
int array to byte array
private byte[] convertIntArrayToByteArray(int[] data) { if (data == null) return null; // ---------- byte[] byts = new byte[data.length * 4]; for (int i = 0; i < data.length; i++) System.arraycopy(convertIntToByteArray(data[i]), 0, byts, i * 4, 4); return byts; }
byte array to int array
public int[] convertByteArrayToIntArray(byte[] data) { if (data == null || data.length % 4 != 0) return null; // ---------- int[] ints = new int[data.length / 4]; for (int i = 0; i < ints.length; i++) ints[i] = ( convertByteArrayToInt(new byte[] { data[(i*4)], data[(i*4)+1], data[(i*4)+2], data[(i*4)+3], } )); return ints; }
byte b1 = 65; // char ch = b1; char ch = (char) b1; System.out.println("byte value: " + b1); // prints 65 System.out.println("Converted char value: " + ch); // prints A (ASCII is 65 for A)
public static char byte2ToChar(byte[] arr) { if (arr == null || arr.length != 2) { throw new IllegalArgumentException("byte数组必须不为空,并且是2位!"); } return (char) (((char) (arr[0] << 8)) | ((char) arr[1])); } public static byte[] charToByte2(char c) { byte[] arr = new byte[2]; arr[0] = (byte) (c >> 8); arr[1] = (byte) (c & 0xff); return arr; }
public static byte[] longToByte64(long sum) { byte[] arr = new byte[64]; for (int i = 63; i >= 0; i--) { arr[i] = (byte) (sum & 1); sum >>= 1; } return arr; }
public static long byte8ToLong(byte[] arr) { if (arr == null || arr.length != 8) { throw new IllegalArgumentException("byte数组必须不为空,并且是8位!"); } return (long) (((long) (arr[0] & 0xff) << 56) | ((long) (arr[1] & 0xff) << 48) | ((long) (arr[2] & 0xff) << 40) | ((long) (arr[3] & 0xff) << 32) | ((long) (arr[4] & 0xff) << 24) | ((long) (arr[5] & 0xff) << 16) | ((long) (arr[6] & 0xff) << 8) | ((long) (arr[7] & 0xff))); } public static byte[] longToByte8(long sum) { byte[] arr = new byte[8]; arr[0] = (byte) (sum >> 56); arr[1] = (byte) (sum >> 48); arr[2] = (byte) (sum >> 40); arr[3] = (byte) (sum >> 32); arr[4] = (byte) (sum >> 24); arr[5] = (byte) (sum >> 16); arr[6] = (byte) (sum >> 8); arr[7] = (byte) (sum & 0xff); return arr; } public static long byte64ToLong(byte[] arr) { if (arr == null || arr.length != 64) { throw new IllegalArgumentException("byte数组必须不为空,并且长度是64!"); } long sum = 0L; for (int i = 0; i < 64; ++i) { sum |= ((long) arr[i] << (63 - i)); } return sum; }
public static byte[] shortToByte16(short s) { byte[] arr = new byte[16]; for (int i = 15; i >= 0; i--) { arr[i] = (byte) (s & 1); s >>= 1; } return arr; } public static short byte16ToShort(byte[] arr) { if (arr == null || arr.length != 16) { throw new IllegalArgumentException("byte数组必须不为空,并且长度为16!"); } short sum = 0; for (int i = 0; i < 16; ++i) { sum |= (arr[i] << (15 - i)); } return sum; } public static short byte2ToShort(byte[] arr) { if (arr != null && arr.length != 2) { throw new IllegalArgumentException("byte数组必须不为空,并且是2位!"); } return (short) (((short) arr[0] << 8) | ((short) arr[1] & 0xff)); } public static byte[] shortToByte2(Short s) { byte[] arr = new byte[2]; arr[0] = (byte) (s >> 8); arr[1] = (byte) (s & 0xff); return arr; }
public static double byte8ToDouble(byte[] arr) { if (arr == null || arr.length != 8) { throw new IllegalArgumentException("byte数组必须不为空,并且是8位!"); } long l = byte8ToLong(arr); return Double.longBitsToDouble(l); } public static byte[] doubleToByte8(double i) { long j = Double.doubleToLongBits(i); return longToByte8(j); }
public static float byte4ToFloat(byte[] arr) { if (arr == null || arr.length != 4) { throw new IllegalArgumentException("byte数组必须不为空,并且是4位!"); } int i = byte4ToInt(arr); return Float.intBitsToFloat(i); } public static byte[] floatToByte4(float f) { int i = Float.floatToIntBits(f); return intToByte4(i); }
byte b= -120; int a= bytes & 0xff;
byte a = (byte)234; System.out.println(a); 上面的代码,结果是-22,因为java中byte是有符号的,byte范围是-128~127。 如果想输出234,该怎么做呢,首先想到的是将a 赋给大一点的类型,如下: byte a = (byte)234; int i = a&0xff; System.out.println(i); 原因是 0xff是int,占4个字节,a是byte,占1个字节,进行&操作的细节如下: 00000000 00000000 00000000 11101010 (a) & 00000000 00000000 00000000 11111111 (0xff) --------------------------------------------------------------------- = 00000000 00000000 00000000 11101010 结果是int,但是符号位是0,说明是正数,最后就是正整数234.
byte bytes[] = {(byte)0, (byte)0, (byte)134, (byte)0, (byte)61}; System.out.println(javax.xml.bind.DatatypeConverter.printHexBinary(bytes));
public static String byteArrayToHex(byte[] bytes) { StringBuilder sb = new StringBuilder(a.length * 2); for(byte b: bytes) sb.append(String.format("%02x", b)); return sb.toString(); }
BigInteger n = new BigInteger(byteArray); String hexa = n.toString(16));
byte[] one = { 1, 2, 3 }; byte[] two = { 6, 8, 9 }; int length = one.Length + two.Length; byte[] sum = new byte[length]; one.CopyTo(sum,0); two.CopyTo(sum,one.Length);
byte[] one = { 1, 2, 3 }; byte[] two = { 6, 8, 9 }; List<byte> list1 = new List<byte>(one); List<byte> list2 = new List<byte>(two); list1.AddRange(list2); byte[] sum2 = list1.ToArray();