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 22 PHP
PHP设计模式之责任链模式的深入解析
Jun 13 PHP
PHP文件上传主要代码讲解
Sep 30 PHP
php5.5中类级别的常量使用介绍
Oct 02 PHP
ThinkPHP2.0读取MSSQL提示Incorrect syntax near the keyword 'AS'的解决方法
Jun 25 PHP
php将图片文件转换成二进制输出的方法
Jun 10 PHP
PHP使用pear自带的mail类库发邮件的方法
Jul 08 PHP
php根据日期或时间戳获取星座信息和生肖等信息
Oct 20 PHP
浅谈PHP各环境下的伪静态配置
Mar 13 PHP
YII框架页面缓存操作示例
Apr 29 PHP
PHP+redis实现微博的拉模型案例详解
Jul 10 PHP
PHP PDO和消息队列的个人理解与应用实例分析
Nov 25 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脚本的10个技巧(4)
2006/10/09 PHP
使用adodb lite解决问题
2006/12/31 PHP
重新封装zend_soap实现http连接安全认证的php代码
2011/01/12 PHP
PHP远程调试之XDEBUG
2015/12/29 PHP
ThinkPHP模板Volist标签嵌套循环输出多维数组的方法
2016/03/23 PHP
php版微信公众号自定义分享内容实现方法
2016/09/22 PHP
PHP中使用mpdf 导出PDF文件的实现方法
2018/10/22 PHP
JavaScript 一道字符串分解的题目
2011/08/03 Javascript
JS 两日期相减,获得天数的小例子(兼容IE,FF)
2013/07/01 Javascript
jquery+json实现数据二级联动的方法
2015/11/28 Javascript
javascript图片预加载完整实例
2015/12/10 Javascript
Angularjs 依赖压缩及自定义过滤器写法
2017/02/04 Javascript
微信小程序 出现错误:{&quot;baseresponse&quot;:{&quot;errcode&quot;:-80002,&quot;errmsg&quot;:&quot;&quot;}}解决办法
2017/02/23 Javascript
vue-hook-form使用详解
2017/04/07 Javascript
vue-router 组件复用问题详解
2018/01/22 Javascript
Angular 向组件传递模板的两种方法
2018/02/23 Javascript
vue自动化表单实例分析
2018/05/06 Javascript
动态内存分配导致影响Javascript性能的问题
2018/12/18 Javascript
layui中select,radio设置不生效的解决方法
2019/09/05 Javascript
element表格翻页第2页从1开始编号(后端从0开始分页)
2019/12/10 Javascript
[01:21]DOTA2 新英雄 森海飞霞
2020/12/18 DOTA
python3 模拟登录v2ex实例讲解
2017/07/13 Python
Python3操作SQL Server数据库(实例讲解)
2017/10/21 Python
Python 12306抢火车票脚本 Python京东抢手机脚本
2018/02/06 Python
python实现音乐下载的统计
2018/06/20 Python
python运用sklearn实现KNN分类算法
2019/10/16 Python
numpy创建单位矩阵和对角矩阵的实例
2019/11/29 Python
python实现跨excel sheet复制代码实例
2020/03/03 Python
13个Pandas实用技巧,助你提高开发效率
2020/08/19 Python
python tqdm库的使用
2020/11/30 Python
html5 视频播放解决方案
2016/11/06 HTML / CSS
试述DBMS的主要功能
2016/11/13 面试题
土木工程个人自荐信范文
2013/11/30 职场文书
淮阳太昊陵导游词
2015/02/10 职场文书
2015秋季开学典礼新闻稿
2015/07/17 职场文书
Python通过loop.run_in_executor执行同步代码 同步变为异步
2022/04/11 Python