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出错界面
Oct 09 PHP
基于mysql的论坛(6)
Oct 09 PHP
php 操作符与控制结构
Mar 07 PHP
PHP对象递归引用造成内存泄漏分析
Aug 28 PHP
php批量删除cookie的简单实现方法
Jan 26 PHP
php在数组中查找指定值的方法
Mar 17 PHP
php实现搜索一维数组元素并删除二维数组对应元素的方法
Jul 06 PHP
thinkPHP+PHPExcel实现读取文件日期的方法(含时分秒)
Jul 07 PHP
PHP数组操作简单案例分析
Oct 15 PHP
微信开发之php表单微信中自动提交两次问题解决办法
Jan 08 PHP
PHPCMS手机站伪静态设置详细教程
Feb 06 PHP
PHP下用Swoole实现Actor并发模型的方法
Jun 12 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
TP5框架实现一次选择多张图片并预览的方法示例
2020/04/04 PHP
JavaScript 高级篇之函数 (四)
2012/04/07 Javascript
javascript中style.left和offsetLeft的用法说明
2014/03/07 Javascript
jquery 选取方法都有哪些
2014/05/18 Javascript
setinterval()与clearInterval()JS函数的调用方法
2015/01/21 Javascript
Javascript中apply、call、bind的巧妙使用
2016/08/18 Javascript
JS 终止执行的实现方法
2016/11/24 Javascript
javascript实现的图片预览功能
2017/03/25 Javascript
AngularJS中的promise用法分析
2017/05/19 Javascript
利用weixin-java-miniapp生成小程序码并直接返回图片文件流的方法
2019/03/29 Javascript
灵活使用console让js调试更简单的方法步骤
2019/04/23 Javascript
微信公众号获取用户地理位置并列出附近的门店的示例代码
2019/07/25 Javascript
使用 UniApp 实现小程序的微信登录功能
2020/06/09 Javascript
vue项目在线上服务器访问失败原因分析
2020/08/14 Javascript
在Python的框架中为MySQL实现restful接口的教程
2015/04/08 Python
详解Python中的序列化与反序列化的使用
2015/06/30 Python
Python的collections模块中namedtuple结构使用示例
2016/07/07 Python
Swift 3.0在集合类数据结构上的一些新变化总结
2016/07/11 Python
Python实现模拟浏览器请求及会话保持操作示例
2018/07/30 Python
Python Matplotlib实现三维数据的散点图绘制
2019/03/19 Python
python实现维吉尼亚加密法
2019/03/20 Python
python绘图模块matplotlib示例详解
2019/07/26 Python
Python lxml模块的基本使用方法分析
2019/12/21 Python
在django中使用apscheduler 执行计划任务的实现方法
2020/02/11 Python
Python装饰器的应用场景代码总结
2020/04/10 Python
Django-celery-beat动态添加周期性任务实现过程解析
2020/11/26 Python
python time.strptime格式化实例详解
2021/02/03 Python
html5中的input新属性range使用记录
2014/09/05 HTML / CSS
美国知名的女性服饰品牌:LOFT(洛芙特)
2016/08/05 全球购物
沙特阿拉伯网上购物:Sayidaty Mall
2018/05/06 全球购物
终端业务员岗位职责
2013/11/27 职场文书
护士毕业生自荐信
2014/02/07 职场文书
初三学习计划书范文
2014/04/30 职场文书
社区三八妇女节活动总结
2015/02/06 职场文书
《别在吃苦的年纪选择安逸》读后感3篇
2019/11/30 职场文书
MySQL库表太大怎么办? 数据库分库分表项目实践
2022/04/11 MySQL