以下是使用Python实现的代码:
```python
import struct
def assemble_packet(head, body):
hlen = len(head)
blen = len(body)
# 创建一个bytearray对象并填充数据
buf = bytearray()
buf.extend(struct.pack('>H', hlen)) # 写入head长度 2字节 16位
buf.extend(struct.pack('>I', blen)) # 写入body长度 4字节 32位
buf.extend(head) # 写入head数据
buf.extend(body) # 写入body数据
return bytes(buf), hlen, blen, None
```
在上面的代码中,我们使用`struct`模块来将整数值打包为二进制数据,并将其添加到`bytearray`对象中。`'>H'`和`'>I'`分别表示大端字节序的16位和32位无符号整数。最后,我们将`bytearray`对象转换为`bytes`对象并返回。
需要注意的是,在Python中,`bytes`对象是不可变的,因此我们使用`bytearray`对象来组装二进制数据。如果需要将`bytes`对象转换为可变的二进制数据类型,可以使用`bytearray()`函数。