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 相关文章推荐
PHP 存储文本换行实现方法
Jan 05 PHP
检查url链接是否已经有参数的php代码 添加 ? 或 &amp;
Feb 09 PHP
php中使用exec,system等函数调用系统命令的方法(不建议使用,可导致安全问题)
Sep 07 PHP
php不使用插件导出excel的简单方法
Mar 04 PHP
php过滤表单提交的html等危险代码
Nov 03 PHP
WordPres对前端页面调试时的两个PHP函数使用小技巧
Dec 22 PHP
Yii数据模型中rules类验证器用法分析
Jul 15 PHP
PHP Header用于页面跳转时的几个注意事项
Oct 21 PHP
利用 fsockopen() 函数开放端口扫描器的实例
Aug 19 PHP
php中的钩子理解及应用实例分析
Aug 30 PHP
php实现微信小程序授权登录功能(实现流程)
Nov 13 PHP
PHP如何防止用户重复提交表单
Dec 09 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技术开发技巧分享
2010/03/23 PHP
解析csv数据导入mysql的方法
2013/07/01 PHP
php另类上传图片的方法(PHP用Socket上传图片)
2013/10/30 PHP
php操作路径的经典方法(必看篇)
2016/10/04 PHP
PHP中模糊查询并关联三个select框
2017/06/19 PHP
深入学习微信网址链接解封的防封原理visit_type
2019/08/15 PHP
javascript attachEvent绑定多个事件执行顺序问题
2010/10/20 Javascript
jsvascript图像处理—(计算机视觉应用)图像金字塔
2013/01/15 Javascript
关于页面嵌入swf覆盖div层的问题的解决方法
2014/02/11 Javascript
jquery跟js初始化加载的多种方法及区别介绍
2014/04/02 Javascript
JQuery给元素绑定click事件多次执行的解决方法
2014/05/29 Javascript
JS实现网站菜单拖拽移位效果的方法
2015/09/24 Javascript
jQuery常用知识点总结以及平时封装常用函数
2016/02/23 Javascript
分享12个非常实用的JavaScript小技巧
2016/05/11 Javascript
判断数组是否包含某个元素的js函数实现方法
2016/05/19 Javascript
Node.js Addons翻译(C/C++扩展)
2016/06/12 Javascript
javascirpt实现2个iframe之间传值的方法
2016/06/30 Javascript
判断横屏竖屏(三种)
2017/02/13 Javascript
javascript 网页进度条简单实例
2017/02/22 Javascript
Element Alert警告的具体使用方法
2020/07/27 Javascript
vue3.0 自适应不同分辨率电脑的操作
2021/02/06 Vue.js
Python3 能振兴 Python的原因分析
2014/11/28 Python
Python脚本实现自动将数据库备份到 Dropbox
2017/02/06 Python
Python人脸识别初探
2017/12/21 Python
Python 查看list中是否含有某元素的方法
2018/06/27 Python
Python中flatten( )函数及函数用法详解
2018/11/02 Python
Python一键安装全部依赖包的方法
2019/08/12 Python
Python接口测试环境搭建过程详解
2020/06/29 Python
css3圆角样式分享自定义按钮样式
2013/12/27 HTML / CSS
h5使用canvas画布实现手势解锁
2019/01/04 HTML / CSS
艺术设计专业个人求职信
2013/09/21 职场文书
老公给老婆的保证书
2014/04/28 职场文书
优秀大学生自荐信
2014/06/09 职场文书
财产分割协议书范本
2014/11/03 职场文书
幼儿园六一儿童节活动总结
2015/02/10 职场文书
离职证明范本
2015/06/12 职场文书