使用C#实现具体场景下的 Python struct.pack 和unpack函数

使用C#来模拟python pack和unpack函数的效果的需求来自一次作业,作业做一个联网的射击游戏,那么不可避免地要进行服务端和客户端地交互,但是服务端代码由Python编写,而客户端代码由C#完成,并且服务端发送数据又经过pack打包,这样一来,客户端就需要去解析收到的数据,然而没有对应的库或者函数可以用(又或者我没有找到),所以我根据我的使用场景来实现了打包和解包的函数。本来不打算发出来,因为没有经过严格的测试(又或者说只适用于我这里的问题),但如果你也有类似的问题,不妨看一看,可能会有启发。

我的使用场景:

 服务端向客户端发送数据时,使用包头+data的方式来避免粘包。首先把计算数据和包头长度,而后将其pack成字符串,与data组合一并发送至客户端,由客户端进行解析。

pack format:4 bytes little endian (x86) by default

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在 Java 中,你可以使用 ByteBuffer 类来实现类似于 Pythonstruct 模块中的 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); // 设置字节序为小端序列(与Pythonstruct默认相同) 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 中如何实现类似于 Pythonstruct 模块中的 packunpack 方法。`packInt` 方法将一个 int 值打包为字节序列,`unpackInt` 方法将字节序列解包为一个 int 值。在这个示例中,我们使用了 ByteBuffer 类来处理字节操作,并通过设置字节序为小端序列来与 Pythonstruct 默认行为保持一致。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值