java自带的unpack闪退,在java中实现unpack和pack方法

php中完善的对二进制流的pack和unpack,下面提供一个在java中实现对二进制字节流实现的unpack和pack方法。public class PackUtils {

public static void main(String[] args) throws IOException {

String content = "b1030000000040000f01030211ba040000000040";

byte[] bytes = pack(content);

System.out.println(unpack(bytes));

String s = MathUtil.bytesToHexString(bytes);

System.out.println(s);

}

/**

* 打包字符串

* 类似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 <

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 

int v = bytes[i] & 0xFF;

String hv = Integer.toHexString(v);

if (hv.length() 

stringBuilder.append(0);

}

stringBuilder.append(hv);

}

return stringBuilder.toString();

}

}

本文由 自成e家 原创

,转载请注明出处,你的支持是我继续写作、分享的最大动力!

期待你一针见血的评论,Come on!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java ,你可以使用 ByteBuffer 类来实现类似于 Python struct 模块packunpack 方法的功能。以下是一个示例代码: ```javaimport java.nio.ByteBuffer; import java.nio.ByteOrder; public class StructExample { public static void main(String[] args) { // 将 int 值打包为字节序列 int intValue =12345; byte[] packedBytes = packInt(intValue); System.out.println("Packed bytes: " + bytesToHex(packedBytes)); // 将字节序列解包为 int 值 int unpackedInt = unpackInt(packedBytes); System.out.println("Unpacked int: " + unpackedInt); } private static byte[] packInt(int value) { ByteBuffer buffer = ByteBuffer.allocate(4); buffer.order(ByteOrder.LITTLE_ENDIAN); // 设置字节序为小端序列(与Python的struct默认相同) buffer.putInt(value); return buffer.array(); } private static int unpackInt(byte[] bytes) { ByteBuffer buffer = ByteBuffer.wrap(bytes); buffer.order(ByteOrder.LITTLE_ENDIAN); // 设置字节序为小端序列 return buffer.getInt(); } private static String bytesToHex(byte[] bytes) { StringBuilder sb = new StringBuilder(); for (byte b : bytes) { sb.append(String.format("%02X", b)); } return sb.toString(); } } ``` 上述代码演示了 Java 如何实现类似于 Python 的 struct 模块packunpack 方法。`packInt` 方法将一个 int 值打包为字节序列,`unpackInt` 方法将字节序列解包为一个 int 值。在这个示例,我们使用了 ByteBuffer 类来处理字节操作,并通过设置字节序为小端序列来与 Python 的 struct 默认行为保持一致。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值