| 知乎专栏 |
package cn.netkiller.test;
import java.util.Arrays;
public class Test {
public static void main(String[] args) throws InterruptedException {
byte[] buffer = new byte[16];
Arrays.fill(buffer, (byte) 0); // 确保每个元素为 0
System.out.println(Arrays.toString(buffer));
}
}
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();