1. int 转 byte[ ]
说明:
- & 0xff (与运算):
- 两个 bit(1 或 0)进行与运算时,如果两者都为 1,结果为 1,否则为 0,
- 而 0xff 转化为 2 进制为:0000000011111111,
- 当一个 int 和 0xff 进行与运算时,即表示提取这个 int 的最低八位。 例如:
- n >>> 8(位运算): >>8 表示右移 8 位,如果该数为正,则高位补 0,若为负数,则高位补 1;
例如:
所以 bytes[1] = (byte) (n >>> 8 & 0xff);
表示 先右移 8 位,然后取最低的八位。 也即从右到左, 取第 9 到 16 位
- 再特别说明一点,上面的转换方法是采用低字节在前的方式,一开始接触的时候看着各种协议文档写着 “低字节在前”,根本不知道是什么意思。 这里解释一下低字节在前的意思,打个比方,咱们不是说 int 有 4 个字节吗? 那转成 byte 数组就是 byte[4] 对吧? byte[4]下标从 0 开始到 3,0 为前面,3 为后面。 int 的 4 个字节,最右边的是最低字节,最左边的是最高字节。 那么低字节在前的意思就是最右边的字节存在 byte[0], 最左边的字节存储在 byte[3]
2. byte[] 转 int
上面的代码中,为什么需要对每个字节进行 & 0xff 运算呢? 不懂的同学可以参考下面的链接学习一下。 https://blog.csdn.net/iblade/article/details/73289831
3. short 转 byte[]
short 转成 byte[] 其实和 int 转 byte[] 的逻辑一样,只不过 int 是四个字节,short 是两个字节。
4. byte[] 转 short
5.long 转 byte[]
long 转成 byte[] 其实和 int 转 byte[] 的逻辑一样,只不过 int 是四个字节,long 是八个字节。
6.byte[] 转 long
注意:要先把每个字节转成 long 类型而不是 int 类型哦,不然后面左移 32 位以上,会超出 int 的存储范围导致数据错误。