java模拟PHP的pack和unpack类

5年以前  |  阅读数:560 次  |  编程语言:PHP 

本文实例为大家分享了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分页显示制作详细讲解
SSH 登录失败:Host key verification failed
获取IMSI
将二进制数据转为16进制以便显示
贪吃蛇
文件下载
获取IMEI
双位运算符
发送邮件
PHP自定义函数获取搜索引擎来源关键字的方法
Java生成UUID
提取后缀名
年的日历图
在Zeus Web Server中安装PHP语言支持
让你成为最历害的git提交人
Yii2汉字转拼音类的实例代码
再谈PHP中单双引号的区别详解
指定应用ID以获取对应的应用名称
Python 2与Python 3版本和编码的对比
php封装的page分页类完整实例