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 截取字符串 分别适合GB2312和UTF8编码情况
Feb 12 PHP
PHP开发环境配置(MySQL数据库安装图文教程)
Apr 28 PHP
编译php 5.2.14+fpm+memcached(具体操作详解)
Jun 18 PHP
PHP仿博客园 个人博客(2) 数据库增添改删
Jul 05 PHP
PHP防止post重复提交数据的简单例子
Jun 07 PHP
php类的定义与继承用法实例
Jul 07 PHP
ajax+php控制所有后台函数调用
Jul 15 PHP
必须收藏的php实用代码片段
Feb 02 PHP
php文件包含目录配置open_basedir的使用与性能详解
Apr 03 PHP
php显示页码分页类的封装
Jun 08 PHP
浅析PHP中的闭包和匿名函数
Dec 25 PHP
php实现的数组转xml案例分析
Sep 28 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 设计模式之 单例模式
2008/12/19 PHP
php找出指定范围内回文数且平方根也是回文数的方法
2015/03/23 PHP
php操作路径的经典方法(必看篇)
2016/10/04 PHP
PHP pthreads v3在centos7平台下的安装与配置操作方法
2020/02/21 PHP
通过JAVASCRIPT读取ASP设定的COOKIE
2007/02/15 Javascript
input+select(multiple) 实现下拉框输入值
2009/05/21 Javascript
!DOCTYPE声明对JavaScript的影响分析
2010/04/12 Javascript
用JavaScript玩转游戏物理(一)运动学模拟与粒子系统
2010/06/19 Javascript
ie下动态加态js文件的方法
2011/09/13 Javascript
兼容ie、firefox的图片自动缩放的css跟js代码分享
2013/08/12 Javascript
鼠标悬浮停留三秒后自动显示大图js代码
2014/09/09 Javascript
JavaScript charCodeAt方法入门实例(用于取得指定位置字符的Unicode编码)
2014/10/17 Javascript
深入理解JavaScript系列(31):设计模式之代理模式详解
2015/03/03 Javascript
JavaScript从数组中删除指定值元素的方法
2015/03/18 Javascript
jQuery实现购物车计算价格功能的方法
2015/03/25 Javascript
使用Vue自定义指令实现Select组件
2018/05/24 Javascript
JS 验证码功能的三种实现方式
2018/11/26 Javascript
基于JS实现web端录音与播放功能
2019/04/17 Javascript
通过实例讲解JS如何防抖动
2019/06/15 Javascript
layer.open回调获取弹出层参数的实现方法
2019/09/10 Javascript
微信小程序实现带放大效果的轮播图
2020/05/26 Javascript
vue3自定义dialog、modal组件的方法
2021/01/04 Vue.js
[50:48]LGD vs CHAOS 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/16 DOTA
在Python中利用Pandas库处理大数据的简单介绍
2015/04/07 Python
python三大神器之fabric使用教程
2019/06/10 Python
Python字符串的一些操作方法总结
2019/06/10 Python
PyTorch中permute的用法详解
2019/12/30 Python
End Clothing美国站:英国男士潮牌商城
2018/04/20 全球购物
2013年保送生自荐信格式
2013/11/20 职场文书
兼职业务员岗位职责
2014/01/01 职场文书
《蒲公英》教学反思
2014/02/28 职场文书
《学会合作》教学反思
2014/04/12 职场文书
赔偿协议书范本
2014/09/12 职场文书
网络营销计划书
2015/01/17 职场文书
检讨书之工作不认真
2019/08/14 职场文书
MySql分区类型及创建分区的方法
2022/04/13 MySQL