首页 > 编程语言 >java模拟PHP的pack和unpack类

java模拟PHP的pack和unpack类

时间:2023-11-13 15:12:32浏览次数:36  
标签:java && int str byte PHP unpack pack

参考链接:https://www.xp.cn/b.php/69284.html

import java.io.IOException;
import java.io.InputStream;
 
public class PackUtil{
 
    /**
     * 打包字符串
     * 类似php中pack在java中的实现
     *
     * @param str
     * @return
     */
    public static byte[] pack(String str) {
      int nibbleshift = 4;
      int position = 0;
      int len = str.length() / 2 + str.length() % 2;
      byte[] output = new byte[len];
      for (char v : str.toCharArray()) {
        byte n = (byte) v;
        if (n >= '0' && n <= '9') {
          n -= '0';
        } else if (n >= 'A' && n <= 'F') {
          n -= ('A' - 10);
        } else if (n >= 'a' && n <= 'f') {
          n -= ('a' - 10);
        } else {
          continue;
        }
        output[position] |= (n << nibbleshift);
 
        if (nibbleshift == 0) {
          position++;
        }
        nibbleshift = (nibbleshift + 4) & 7;
      }
 
      return output;
    }
 
    /**
     * 16进制的字符解压 类php中unpack
     *
     * @param is
     * @param len
     * @return
     * @throws IOException
     */
    public static String unpack(InputStream is, int len) throws IOException {
      byte[] bytes = new byte[len];
      is.read(bytes);
      return unpack(bytes);
    }
 
    /***
     * 16进制的字符解压 类php中unpack
     * @param bytes
     * @return
     */
    public static String unpack(byte[] bytes) {
      StringBuilder stringBuilder = new StringBuilder("");
      if (bytes == null || bytes.length <= 0) {
        return null;
      }
      for (int i = 0; i < bytes.length; i++) {
        int v = bytes[i] & 0xFF;
        String hv = Integer.toHexString(v);
        if (hv.length() < 2) {
          stringBuilder.append(0);
        }
        stringBuilder.append(hv);
      }
      return stringBuilder.toString();
    }
  }

  

标签:java,&&,int,str,byte,PHP,unpack,pack
From: https://www.cnblogs.com/webttt/p/17829200.html

相关文章

  • Java核心知识体系6:集合框架详解
    Java核心知识体系1:泛型机制详解Java核心知识体系2:注解机制详解Java核心知识体系3:异常机制详解Java核心知识体系4:AOP原理和切面应用Java核心知识体系5:反射机制详解1集合框架图总览我们来简单解读下上面这个框架图:所有集合类都位于java.util包下Iterator是遍历集合的工具......
  • Java 小文件上传、大文件分片上传、断点续传、秒传的开发原理
    1、前言 文件上传在项目开发中再常见不过了,大多项目都会涉及到图片、音频、视频、文件的上传,通常简单的一个Form表单就可以上传小文件了,但是遇到大文件时比如1GB以上,或者用户网络比较慢时,简单的文件上传就不能适用了,用户辛苦传了好几十分钟,到最后发现上传失败,这样的系统用户体......
  • java中String、StringBuffer和StringBuilder的区别(简单介绍)
    简单介绍java中用于处理字符串常用的有三个类:1、java.lang.String2、java.lang.StringBuffer3、java.lang.StrungBuilder三者共同之处:都是final类,不允许被继承,主要是从性能和安全性上考虑的,因为这几个类都是经常被使用着,且考虑到防止其中的参数被参数修改影响到其他的应用......
  • java(StringBuilder)练习
    需求:键盘录入一个九位数以下的数字将该数字各数字变为罗马数字。importjava.util.Scanner;publicclassBoke{publicstaticvoidmain(String[]args){ScannerSc=newScanner(System.in);Stringx;while(true){System.out.......
  • PHP反序列化题型_Laravel框架漏洞利用
    ctfshowweb271<?phpdefine('LARAVEL_START',microtime(true));require__DIR__.'/../vendor/autoload.php';/*|--------------------------------------------------------------------------|TurnOnTheLights|-------------------......
  • Java项目配置Maven依赖时不知需要的最低jdk版本?(报错java: 错误: 无效的目标发行版:17)
    1.问题在配置SpringBoot项目依赖时,使用了最新的spring-boot-starter-parent3.1.5,但是出现了java:错误:无效的目标发行版:17的报错2.解决经过查阅资料后得知是jdk版本不匹配导致的错误,那我们如何得知相应依赖需要的最低版本需求,并进行配置呢?Maven依赖仓库1.登陆进这个网站后......
  • JavaScript 基础知识
    运营商 运算符对数据进行操作。它们有多种形式,包括算术运算符(+、-、*、/)、比较运算符(==、!=、<、>)和逻辑运算符(&&、||、!) 控制流语句 控制流语句根据特定条件控制代码块的执行顺序。它们包括if-else语句、switch语句和循环。数组 数组是数据项的有序集合。它们允许您......
  • Java的设计模式之原型模式
    在某些情况下,需要创建对象的副本,但是复制一个对象的成本可能很高,或者希望避免与对象的具体类耦合。例如,当创建对象的过程较为复杂,或者对象包含大量共享的状态时,使用常规的创建方法可能会导致性能下降。原型模式的解决方案是通过复制现有对象来创建新对象,而不是从头开始构建。这允许......
  • JAVA
    Java是一种具有简单的、面向对象的、分布式的、解释型的、健壮的、安全的、体系结构中立的、可移植的、高性能的、多线程的、动态的语言。JVE是虚拟机  JRE是JAVA的运行环境  JDK是程序开发工具包 写一个类的模版(简单称呼编写Java源代码)publicclass类名{  publ......
  • java中类名一定要和java文件名一致吗?
    原文链接:https://blog.csdn.net/qq_42449963/article/details/106199732 结论:首先java中类名不一定要和java文件名一致,是否一致需要分情况,其次java中可以有多个类,但是最多只有一个类的类名和文件名相同,如果一个类被public修饰,那该类的类名必须和文件名相同,并且一个java文件中......