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 相关文章推荐
PHP5 面向对象(学习记录)
Dec 02 PHP
PHP连接Access数据库的方法小结
Jun 20 PHP
discuz加密解密函数使用方法和中文注释
Jan 21 PHP
ThinkPHP 404页面的设置方法
Jan 14 PHP
php实现过滤字符串中的中文和数字实例
Jul 29 PHP
WordPress中的shortcode短代码功能使用详解
May 17 PHP
Zend Framework数据库操作技巧总结
Feb 18 PHP
PHP从数组中删除元素的四种方法实例
May 12 PHP
PHP+Session防止表单重复提交的解决方法
Apr 09 PHP
php微信公众号开发之图片回复
Oct 20 PHP
PHP操作路由器实现方法示例
Apr 27 PHP
PHP Beanstalkd消息队列的安装与使用方法实例详解
Feb 21 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 CURL模拟登录新浪微博抓取页面内容 基于EaglePHP框架开发
2012/01/16 PHP
THINKPHP支持YAML配置文件的设置方法
2015/03/17 PHP
php中session定期自动清理的方法
2015/11/12 PHP
PHP实现基于3DES算法加密解密字符串示例
2018/08/24 PHP
Yii框架 session 数据库存储操作方法示例
2019/11/18 PHP
在视频前插入广告
2006/11/20 Javascript
textarea中的手动换行处理的jquery代码
2011/02/26 Javascript
JQuery入门—JQuery程序的代码风格详细介绍
2013/01/03 Javascript
javascript的渐进增强与平稳退化浅谈
2013/11/12 Javascript
js+CSS实现弹出居中背景半透明div层的方法
2015/02/26 Javascript
jQuery插件zTree实现的多选树效果示例
2017/03/08 Javascript
微信小程序教程系列之新建页面(4)
2017/04/17 Javascript
JavaScript实现打地鼠小游戏
2020/04/23 Javascript
Node.js 8 中的重要新特性
2017/06/28 Javascript
JS自定义滚动条效果简单实现代码
2020/10/27 Javascript
用vue构建多页面应用的示例代码
2017/09/20 Javascript
浅谈react前后端同构渲染
2017/09/20 Javascript
ztree加载完成后显示勾选节点的实现代码
2018/10/22 Javascript
js如何验证密码强度
2020/03/18 Javascript
jQuery 移除事件的方法
2020/06/20 jQuery
vue+element table表格实现动态列筛选的示例代码
2021/01/14 Vue.js
[51:22]Fnatic vs IG 2018国际邀请赛小组赛BO2 第一场 8.17
2018/08/18 DOTA
详解用Python处理HTML转义字符的5种方式
2017/12/27 Python
Python实现朴素贝叶斯的学习与分类过程解析
2019/08/24 Python
keras的ImageDataGenerator和flow()的用法说明
2020/07/03 Python
HTML5 新旧语法标记对我们有什么好处
2012/12/13 HTML / CSS
倩碧美国官网:Clinique美国
2016/07/20 全球购物
美国购买新书和二手书网站:Better World Books
2018/10/31 全球购物
Conforama西班牙:您的家具、装饰和电器商店
2020/02/21 全球购物
介绍java中初始化块的使用
2012/09/11 面试题
校园自助餐厅的创业计划书
2013/12/26 职场文书
新闻编辑专业毕业自荐书范文
2014/02/05 职场文书
计算机大学生职业生涯规划书范文
2014/02/19 职场文书
民主生活会对照检查材料
2014/09/22 职场文书
服务明星事迹材料
2014/12/29 职场文书
怀孕辞职信怎么写
2015/02/28 职场文书