当前标签 / 位运算 / 总共2篇

byte 数组和 short、int 之间转换「转」

在项目中很多时候我们会遇到 byte[]int 之间的相互转换问题,使用 ByteBuffer 可以很优雅的解决这个问题。

可以设置大端模式 ByteOrder.BIG_ENDIAN 和小端模式 ByteOrder LITTLE_ENDIAN:

例如数据为十六进制: 00 00 0x01 0x32 转换为 byte[] 数组为 byte[0] = 0, byte[1] = 0, byte[2] = 1, byte[3] = 50

这种情况下可以使用大端模式转换,如果是十六进制:0x32 0x01 00 00 则可以使用小端模式转换。

阅读更多

int转byte和位运算问题

前言

在 Java 中 int 占 4 个字节, short 占 2 个字节, byte 占 1 个字节,有时候我们需要将 int 转换为 byte 就需要舍弃一些高位或者低位数据。

转换

比如有两个变量:

1
2
3
4
5
6
7
int i = 5;
int j = 0xff24;
int k = -4;
int m = -400;
System.out.println(Integer.toBinaryString(i));
System.out.println(Integer.toBinaryString(j));
System.out.println(Integer.toBinaryString(k));

二进制补码表示:

1
2
3
4
5
6
7
8
0000 0000 0000 0000 0000 0000 0000 0101 (5的补码)
0000 0000 0000 0000 1111 1111 0010 0100 (0xff24的补码)

0000 0000 0000 0000 0000 0000 0000 0100 (-4 的 绝对值)
1111 1111 1111 1111 1111 1111 1111 1100 (-4 的 补码)

0000 0000 0000 0000 0000 0001 1001 0000 (-400 的 绝对值)
1111 1111 1111 1111 1111 1110 0111 0000 (-400 的 补码)

阅读更多