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
PHP面向对象编程快速入门
Oct 09 PHP
php表单提交问题的解决方法
Apr 12 PHP
简单的php新闻发布系统教程
May 09 PHP
php中instanceof 与 is_a()区别分析
Mar 03 PHP
谈谈PHP连接Access数据库的注意事项
Aug 12 PHP
php中strlen和mb_strlen用法实例分析
Nov 12 PHP
PHP用户注册邮件激活账户的实现代码
May 31 PHP
PHP基于面向对象实现的留言本功能实例
Apr 04 PHP
PHP实现将多个文件压缩成zip格式并下载到本地的方法示例
May 23 PHP
php用户名的密码加密更安全的方法
Jun 21 PHP
详解PHP Swoole与TCP三次握手
May 27 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 日,周,月点击排行统计
2012/01/11 PHP
Yii使用ajax验证显示错误messagebox的解决方法
2014/12/03 PHP
php简单socket服务器客户端代码实例
2015/05/18 PHP
PHP函数实现从一个文本字符串中提取关键字的方法
2015/07/01 PHP
php版微信公众平台回复中文出现乱码问题的解决方法
2016/09/22 PHP
Json_decode 解析json字符串为NULL的解决方法(必看)
2017/02/17 PHP
PHPExcel 修改已存在Excel的方法
2018/05/03 PHP
基于jQuery架构javascript基础体系
2011/01/01 Javascript
nodejs读取memcache示例分享
2014/01/02 NodeJs
jquery自定义函数的多种方法
2014/01/09 Javascript
用Node.js通过sitemap.xml批量抓取美女图片
2015/05/28 Javascript
网页收藏夹显示ICO图标(代码少)
2015/08/04 Javascript
jquery实现动画菜单的左右滚动、渐变及图形背景滚动等效果
2015/08/25 Javascript
IE下JS保存图片的简单实例
2016/07/15 Javascript
概述jQuery的元素筛选
2016/11/23 Javascript
超全面的javascript中变量命名规则
2017/02/09 Javascript
html+javascript+bootstrap实现层级多选框全层全选和多选功能
2017/03/09 Javascript
vue2组件实现懒加载浅析
2017/03/29 Javascript
BootStrap中的Fontawesome 图标
2017/05/25 Javascript
JS实现点击Radio动态更新table数据
2017/07/18 Javascript
Node+OCR实现图像文字识别功能
2018/11/26 Javascript
Python动态加载模块的3种方法
2014/11/22 Python
Python应用03 使用PyQT制作视频播放器实例
2016/12/07 Python
Python小程序 控制鼠标循环点击代码实例
2019/10/08 Python
Python中socket网络通信是干嘛的
2020/05/27 Python
python爬取天气数据的实例详解
2020/11/20 Python
如何用python实现一个HTTP连接池
2021/01/14 Python
全面解析CSS Media媒体查询使用操作(推荐)
2017/08/15 HTML / CSS
HTML页面中添加Canvas标签示例
2015/01/01 HTML / CSS
Fanatics英国官网:美国体育电商
2018/11/06 全球购物
美国最大的户外装备和服装购物网站:Backcountry
2019/10/15 全球购物
在Java开发中如何选择使用哪种集合类
2016/08/09 面试题
运动会铅球比赛加油稿
2014/09/26 职场文书
2015年学校医务室工作总结
2015/07/20 职场文书
2016年会领导致辞稿
2015/07/29 职场文书
导游词之镜泊湖
2019/12/09 职场文书