java模拟PHP的pack和unpack类


Posted in PHP onApril 13, 2016

本文实例为大家分享了java模拟PHP的pack和unpack类的具体代码,供大家参考,具体内容如下

package qghl.intp.util;
 
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程序设计有所帮助。

PHP 相关文章推荐
基于mysql的bbs设计(一)
Oct 09 PHP
PHP的异常处理类Exception的使用及说明
Jun 13 PHP
关于PHP实现异步操作的研究
Feb 03 PHP
如何用php生成扭曲及旋转的验证码图片
Jun 07 PHP
使用PHP计算两个路径的相对路径
Jun 14 PHP
php unset全局变量运用问题的深入解析
Jun 17 PHP
php读取excel文件示例分享(更新修改excel)
Feb 27 PHP
php环境套包 dedeampz 伪静态设置示例
Mar 26 PHP
PHP中copy on write写时复制机制介绍
May 13 PHP
php使用Session和文件统计在线人数
Jul 04 PHP
php采用session实现防止页面重复刷新
Dec 24 PHP
PHP7 新特性详细介绍
Sep 06 PHP
php远程下载类分享
Apr 13 #PHP
Thinkphp和onethink实现微信支付插件
Apr 13 #PHP
PHP MSSQL 分页实例
Apr 13 #PHP
php构造方法中析构方法在继承中的表现
Apr 12 #PHP
非集成环境的php运行环境(Apache配置、Mysql)搭建安装图文教程
Apr 12 #PHP
ThinkPHP框架里隐藏index.php
Apr 12 #PHP
PHP 绘制网站登录首页图片验证码
Apr 12 #PHP
You might like
PHP图片处理类 phpThumb参数用法介绍
2012/03/11 PHP
关于php操作mysql执行数据库查询的一些常用操作汇总
2013/06/24 PHP
PHP使用array_multisort对多个数组或多维数组进行排序
2014/12/16 PHP
PHP设计模式之单例模式原理与实现方法分析
2018/04/25 PHP
yii2中关于加密解密的那些事儿
2018/06/12 PHP
分享几种好用的PHP自定义加密函数(可逆/不可逆)
2020/09/15 PHP
JavaScript中的一些定位属性[图解]
2010/07/14 Javascript
Node.js中使用Buffer编码、解码二进制数据详解
2014/08/16 Javascript
javascript中alert()与console.log()的区别
2015/08/26 Javascript
JavaScript实现多种排序算法
2016/02/24 Javascript
Bootstrap3 input输入框插入glyphicon图标的方法
2016/05/16 Javascript
AngularJS实现星星等级评分功能
2016/09/24 Javascript
vue2.0开发实践总结之疑难篇
2016/12/07 Javascript
详解vue 配合vue-resource调用接口获取数据
2017/06/22 Javascript
详解在Angular项目中添加插件ng-bootstrap
2017/07/04 Javascript
vue 项目中使用Loading组件的示例代码
2018/08/31 Javascript
微信小程序扫描二维码获取信息实例详解
2019/05/07 Javascript
angular多语言配置详解
2019/05/16 Javascript
[48:02]Ti4循环赛第三日 VG vs Liquid和NEWBEE vs DK
2014/07/12 DOTA
[04:20]DOTA2-DPC中国联赛 正赛 VG vs LBZS 选手采访 1月19日
2021/03/11 DOTA
用Python进行一些简单的自然语言处理的教程
2015/03/31 Python
python getopt详解及简单实例
2016/12/30 Python
Python编程实现的图片识别功能示例
2017/08/03 Python
详解Tensorflow数据读取有三种方式(next_batch)
2018/02/01 Python
Python 读取指定文件夹下的所有图像方法
2018/04/27 Python
基于python实现名片管理系统
2018/11/30 Python
Python3中函数参数传递方式实例详解
2019/05/05 Python
numpy ndarray 取出满足特定条件的某些行实例
2019/12/05 Python
详解如何用canvas画一个微笑的表情
2019/03/14 HTML / CSS
data:image data url 文件转为Blob上传后端的方法
2019/07/16 HTML / CSS
描述一下JVM加载class文件的原理机制
2013/12/08 面试题
优秀员工年终发言演讲稿
2014/01/01 职场文书
校园安全广播稿
2014/02/08 职场文书
综合办公室主任岗位职责
2014/04/13 职场文书
再见,2019我们不负使命;你好,2020我们砥砺前行
2020/01/03 职场文书
Netty分布式客户端接入流程初始化源码分析
2022/03/25 Java/Android