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 程序员也要学会使用“异常”
Jun 16 PHP
PHP stream_context_create()作用和用法分析
Mar 29 PHP
php数组函数序列之in_array() - 查找数组中是否存在指定值
Nov 07 PHP
php使用fopen创建utf8编码文件的方法
Oct 31 PHP
php数组查找函数总结
Nov 18 PHP
PHP下SSL加密解密、验证、签名方法(很简单)
Jun 28 PHP
php arsort 数组降序排序详细介绍
Nov 17 PHP
解决php 处理 form 表单提交多个 name 属性值相同的 input 标签问题
May 11 PHP
php实现的后台表格分页功能示例
Oct 23 PHP
yii2 url重写并隐藏index.php方法
Dec 10 PHP
YII框架常用技巧总结
Apr 27 PHP
微信支付之JSAPI公众号支付详解
May 15 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
PHP3 safe_mode 失效漏洞
2006/10/09 PHP
回答PHPCHINA上的几个问题:URL映射
2007/02/14 PHP
PHP多例模式介绍
2013/06/24 PHP
配置Nginx+PHP的正确思路与过程
2016/05/10 PHP
php实现带读写分离功能的MySQL类完整实例
2016/07/28 PHP
PHP Oauth授权和本地加密实现方法
2016/08/12 PHP
PHP+MySQL高并发加锁事务处理问题解决方法
2018/04/30 PHP
分享5个非常有用的Laravel Blade指令
2018/05/30 PHP
php实现通过stomp协议连接ActiveMQ操作示例
2020/02/23 PHP
自动生成文章摘要的代码[JavaScript 版本]
2007/03/20 Javascript
Javascript Math对象
2009/08/13 Javascript
页面中js执行顺序
2009/11/09 Javascript
基于jquery的一个拖拽到指定区域内的效果
2011/09/21 Javascript
谈谈我对JavaScript DOM事件的理解
2015/12/18 Javascript
js简单倒计时实现代码
2016/04/30 Javascript
基于jquery实现ajax无刷新评论
2020/08/19 Javascript
JavaScript必知必会(七)js对象继承
2016/06/08 Javascript
JS控制文本域只读或可写属性的方法
2016/06/24 Javascript
JS实现列表的响应式排版(推荐)
2016/09/01 Javascript
jquery 中toggle的2种用法详解(推荐)
2016/09/02 Javascript
微信小程序 数组中的push与concat的区别
2017/01/05 Javascript
NodeJs测试框架Mocha的安装与使用
2017/03/28 NodeJs
ES6 新增的创建数组的方法(小结)
2019/08/01 Javascript
package.json配置文件构成详解
2019/08/27 Javascript
vue根据条件不同显示不同按钮的操作
2020/08/04 Javascript
Django配置跨域并开发测试接口
2020/11/04 Python
pandas将list数据拆分成行或列的实现
2020/12/13 Python
心碎乌托邦的创业计划书范文
2013/12/26 职场文书
环保倡议书100字
2014/05/15 职场文书
乡文化站暑期培训方案
2014/08/28 职场文书
房屋所有权证明
2014/10/20 职场文书
党的群众路线教育实践活动个人对照检查材料(企业)
2014/11/05 职场文书
工伤劳动仲裁代理词
2015/05/25 职场文书
毕业论文指导老师意见
2015/06/04 职场文书
tree shaking对打包体积优化及作用
2022/07/07 Java/Android
Nginx使用ngx_http_upstream_module实现负载均衡功能示例
2022/08/05 Servers