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

本文介绍了一种在Java中实现int类型与byte数组之间的转换方法,使用大端序列进行编码。通过具体示例展示了如何将int值转换为byte数组以及如何将byte数组还原为int值。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >



第一种方法: 通过大端序列方法将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 -》01111111 00000000 00000000 00000000 

通过| 与运算  1|0 =1 0|0=0 1|1=1

val =0 二进制 

00000000 00000000 00000000 00000000 

01111111 00000000 00000000 00000000 

通过与运算,输出01111111 00000000 00000000 00000000 

  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.youkuaiyun.com/download/netcobol/10308871


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值