您的位置:首页 > 其它

Netty 快速入门系列 - Chapter 6 自定义数据协议【第十三讲】 通过大端序列方法将4个字节int转成 byte数组

2018-03-26 08:42 671 查看


第一种方法: 通过大端序列方法将4个字节int转成 byte数组

大端序列方法:
int2bytes:

将int 从高到低位分别保存到 byte[0] ~ byte[3]
    byte[] bytes = new byte[4];

     for (int i = 0; i < bytes.length; i++) {

       bytes[i] = (byte) ((val >> 8 * (3 - i)));

     }
当 i =0 时, bytes[0] =  (byte) ((val >> 24));
一个int 32位, 向右移动24位,高32-24=8位将移动到最低位上,通过强制byte转换,仅仅保留8个字节。
例如:01111111 00000000 00000000 00000000  --(>> 24)->00000000 00000000 00000000 01111111 



bytes2int:
还原高位,即向左移动。0xff:二进制:11111111
如果 i=0, 最高位 bytes[i] & 0xff 仅仅保留 8位, 再((bytes[i] & 0xff) << (8 * 3)) 左移动24位
01111111 -》[b]01111111 00000000 00000000 00000000 [/b]

通过| 与运算  1|0 =1 0|0=0 1|1=1
val =0 二进制 
[b]00000000 00000000 00000000 00000000 
[/b]
[b]01111111 00000000 00000000 00000000 
[/b]
通过与运算,输出[b]01111111 00000000 00000000 00000000 [/b]
  int val = 0;

     for (int i = 0; i < bytes.length; i++) {
       val = val | ((bytes[i] & 0xff) << (8 * (3 - i)));
     }


package com.john.netty.learn.ch08.test;

import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.util.Arrays;

public class Test1 {

public static void main(String[] args) throws IOException {

int id = 123456789;
int age = 21;

System.out.println(Arrays.toString(int2bytes(id)));
System.out.println(Arrays.toString(int2bytes(age)));

System.out.println("id:" + bytes2int(int2bytes(id)));
System.out.println("age:" + bytes2int(int2bytes(age)));
}

/**
* 大端序列方法
*
* @param val
* @return
*/
public static byte[] int2bytes(int val) {

byte[] bytes = new byte[4];

for (int i = 0; i < bytes.length; i++) {

bytes[i] = (byte) ((val >> 8 * (3 - i)));
}

return bytes;
}

public static int bytes2int(byte[] bytes) {

int val = 0;

for (int i = 0; i < bytes.length; i++) {

val = val | ((bytes[i] & 0xff) << (8 * (3 - i)));
}

return val;

}
}

所有源码下载 :https://download.csdn.net/download/netcobol/10308871
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Netty
相关文章推荐