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 相关文章推荐
多重?l件?合查?(二)
Oct 09 PHP
php for 循环语句使用方法详细说明
May 09 PHP
PHP+JS+rsa数据加密传输实现代码
Mar 23 PHP
PHP分多步骤填写发布信息的简单方法实例代码
Sep 23 PHP
深入Memcache的Session数据的多服务器共享详解
Jun 13 PHP
PHP批量上传图片的具体实现方法介绍.
Feb 26 PHP
PHP微信开发用Cache 解决数据缓存
Jul 11 PHP
详解PHP防止直接访问.php 文件的实现方法
Jul 28 PHP
PHP实现图的邻接矩阵表示及几种简单遍历算法分析
Nov 24 PHP
PHP函数按引用传递参数及函数可选参数用法示例
Jun 04 PHP
YII2.0框架行为(Behavior)深入详解
Jul 26 PHP
ThinkPHP5.1的权限控制怎么写?分享一个AUTH权限控制
Mar 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
我的论坛源代码(十)
2006/10/09 PHP
从零开始学YII2框架(三)扩展插件yii2-gird
2014/08/20 PHP
php实现的常见排序算法汇总
2014/09/08 PHP
PHP中的switch语句的用法实例详解
2015/10/21 PHP
PHP中substr函数字符串截取用法分析
2016/01/07 PHP
Js 刷新框架页的代码
2010/04/13 Javascript
解析javascript 浏览器关闭事件
2013/07/08 Javascript
jQuery制作仿腾讯web qq用户体验桌面
2013/08/20 Javascript
详解jquery uploadify 上传文件
2013/11/09 Javascript
JavaScript数组函数unshift、shift、pop、push使用实例
2014/08/27 Javascript
BootStrap下拉框在firefox浏览器界面不友好的解决方案
2016/08/18 Javascript
a标签跳转到指定div,jquery添加和移除class属性的实现方法
2016/10/10 Javascript
jQuery实现动态给table赋值的方法示例
2017/07/04 jQuery
最通俗易懂的javascript变量提升详解
2017/08/05 Javascript
通过fastclick源码分析彻底解决tap“点透”
2017/12/24 Javascript
angularjs实现分页和搜索功能
2018/01/03 Javascript
解决Vue不能检测数组或对象变动的问题
2018/02/24 Javascript
详解Vue中组件传值的多重实现方式
2019/08/16 Javascript
Vue 的双向绑定原理与用法揭秘
2020/05/06 Javascript
[47:39]2018DOTA2亚洲邀请赛 3.31 小组赛 A组 LGD vs OPTIC
2018/03/31 DOTA
python GUI库图形界面开发之PyQt5输入对话框QInputDialog详细使用方法与实例
2020/02/27 Python
Python 实现将大图切片成小图,将小图组合成大图的例子
2020/03/14 Python
如何理解Python中包的引入
2020/05/29 Python
css3气泡 css3关键帧动画创建的动态通知气泡
2013/02/26 HTML / CSS
HTML5的video标签的浏览器兼容性增强方案分享
2016/05/19 HTML / CSS
南京迈特望C/C++面试题
2012/07/09 面试题
年度考核自我鉴定
2013/11/09 职场文书
业务经理岗位职责
2013/11/11 职场文书
经典导游欢迎词大全
2014/01/16 职场文书
献爱心大型公益活动策划方案
2014/09/15 职场文书
师德师风自我剖析材料
2014/09/27 职场文书
社会主义核心价值观主题教育活动总结
2015/05/07 职场文书
单位同意报考证明
2015/06/17 职场文书
拔河比赛新闻稿
2015/07/17 职场文书
婚礼男方父母答谢词
2015/09/29 职场文书
熟背这些句子,让您的英语口语突飞猛进(135句)
2019/09/06 职场文书