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显示今天、今月、上月、今年的起点/终点时间戳的代码
May 25 PHP
php max_execution_time执行时间问题
Jul 17 PHP
PHP面向对象法则
Feb 23 PHP
php中inlcude()性能对比详解
Sep 16 PHP
php eval函数用法 PHP中eval()函数小技巧
Oct 31 PHP
php中OR与|| AND与&amp;&amp;的区别总结
Oct 26 PHP
php中有关字符串的4个函数substr、strrchr、strstr、ereg介绍和使用例子
Apr 24 PHP
destoon实现会员商铺中指定会员或会员组投放广告的方法
Aug 21 PHP
PHP面试题之文件目录操作
Oct 15 PHP
php使用get_class_methods()函数获取分类的方法
Jul 20 PHP
PHP数组操作实例分析【添加,删除,计算,反转,排序,查找等】
Dec 24 PHP
PHP实现将标点符号正则替换为空格的方法
Aug 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 magic_quotes_gpc的使用方法详解
2013/06/24 PHP
对于PHP 5.4 你必须要知道的
2013/08/07 PHP
PHP5中实现多态的两种方法实例分享
2014/04/21 PHP
总结PHP中数值计算的注意事项
2016/08/14 PHP
TP5框架使用QueryList采集框架爬小说操作示例
2020/03/26 PHP
javascript设计模式之工厂模式示例讲解
2014/03/04 Javascript
javascript生成img标签的3种实现方法(对象、方法、html)
2015/12/25 Javascript
jQuery模仿京东/天猫商品左侧分类导航菜单效果
2016/06/29 Javascript
微信小程序-获得用户输入内容
2017/02/13 Javascript
JS使用cookie实现只出现一次的广告代码效果
2017/04/22 Javascript
JS设置随机出现2个数字的实例代码
2017/07/19 Javascript
关于webpack代码拆分的解析
2017/07/20 Javascript
node通过express搭建自己的服务器
2017/09/30 Javascript
angular之ng-template模板加载
2017/11/09 Javascript
vue+iview动态渲染表格详解
2019/03/19 Javascript
JS脚本实现定时到网站上签到/签退功能
2020/04/22 Javascript
python中常用的各种数据库操作模块和连接实例
2014/05/29 Python
Python 关于反射和类的特殊成员方法
2017/09/14 Python
pandas值替换方法
2018/07/10 Python
pandas DataFrame 删除重复的行的实现方法
2019/01/29 Python
wxPython实现整点报时
2019/11/18 Python
Django模板之基本的 for 循环 和 List内容的显示方式
2020/03/31 Python
Python + selenium + crontab实现每日定时自动打卡功能
2020/03/31 Python
python温度转换华氏温度实现代码
2020/12/06 Python
python实现KNN近邻算法
2020/12/30 Python
白俄罗斯在线大型超市:e-dostavka.by
2019/07/25 全球购物
药剂学专业应届生自荐信
2013/09/29 职场文书
历史专业个人求职信分享
2013/12/20 职场文书
吨的认识教学反思
2014/04/27 职场文书
团支书竞选演讲稿
2014/04/28 职场文书
创先争优活动心得体会
2014/09/04 职场文书
出纳试用期自我鉴定范文
2014/09/16 职场文书
音乐教育专业自荐信
2014/09/18 职场文书
企业反腐倡廉心得体会
2015/08/15 职场文书
教师反邪教心得体会
2016/01/15 职场文书
学习师德师风的心得体会(2篇)
2019/10/08 职场文书