解析二进制文件的工具方法

2022-08-23 15:33:43 浏览数 (1)

目录

  • 1 一个字节范围
  • 2 >> 的含义
  • 3 十进制的负数变成二进制
  • 4 0x1 代表什么意思
  • 5字节组转list
  • 6 list转字节组
  • 7 截取bytes

1 一个字节范围

1个字节,取值范围是-128~127.

正数的最大补码:01111111,即127.负数的最大补码10000000,原码为100000000,即进了一位变成了-128

代码语言:javascript复制
01111111      为127

2 >> 的含义

是一个“有符号”右移位运算符;它会将运算符左边的运算对象向右移动运算符右侧指定的位数。 右移动之后,高位会自动补0 运算符使用了“符号扩展”:若值为正,则在高位插入0;若值为负,则在高位插入1

代码语言:javascript复制
 byte num = -128;      的二进制为   10000000

3 十进制的负数变成二进制

负数转换为二进制,就是将其相反数(正数)的补码的每一位变反(1变0,0变1)最后将变完了的数值加1,就完成了负数的补码运算。这样就变成了二进制。

代码语言:javascript复制
11 >>2(11为int型)

1)、11的二进制形式为:0000 0000 0000 0000 0000 0000 0000 1011

2)、把低位的最后两个数字移出,因为该数字是正数,所以在高位补零。

3)、最终结果是0000 0000 0000 0000 0000 0000 0000 0010。

4)、转换为十进制是3。

4 0x1 代表什么意思

代码语言:javascript复制
 byte nuy = 0x1;
 String s1 = BitConverter.byteToBit(nuy  );
 System.out.println(s1);


值为   00000001

5字节组转list

代码语言:javascript复制
 public static List<Byte> bytesToList(byte[] bytes) {
    return Bytes.asList(bytes);
  }

6 list转字节组

代码语言:javascript复制
/**
   * list转字节组
   *
   * @param list list
   * @return byte[]
   */
  public static byte[] listToBytes(List<Byte> list) {
    return Bytes.toArray(list);
  }

7 截取bytes

代码语言:javascript复制
/**
   * 截取bytes
   *
   * @param bytes 字节组
   * @param from 起始位
   * @param to 结束位
   * @return bytes
   */
  public static byte[] subBytes(byte[] bytes, int from, int to) {
    return Arrays.copyOfRange(bytes, from, to);
  }

0 人点赞