怎样将一个数据包拼成前边加6个字节包头的数据包

mac2024-03-14  34

我这边包头定义是

包长度(2字节),数据类型(2字节),数据长度(2字节).............数据(变长)

/** * 将原数据包转为带6个字节包头的数据包 * @param type (十进制)数据类型 * @param message (不带包头)数据包 * @author xxs * @return */ public static byte[] getSendContent(int type, byte[] message) { int messageLength = message.length; int contentLength = message.length + 6; byte message_low = (byte) (messageLength & 0x00ff); // 获得信息低位字节 byte message_high = (byte) ((messageLength >> 8)&0xff);// 获得信息高位字节 byte type_low = (byte) (type & 0x00ff); // 获得类型低位字节 byte type_high = (byte) ((type >> 8)&0xff);// 获得类型高位字节 byte content_low = (byte) (contentLength & 0x00ff); // 获得内容长度低位字节 byte content_high = (byte) ((contentLength >> 8)&0xff);// 获得内容长度高位字节 byte[] headMessage = new byte[6]; headMessage[0] = content_low; headMessage[1] = content_high; headMessage[2] = type_low; headMessage[3] = type_high; headMessage[4] = message_low; headMessage[5] = message_high; byte[] sendContent = new byte[contentLength]; System.arraycopy(headMessage, 0, sendContent, 0, 6); System.arraycopy(message, 0, sendContent, 6, messageLength); return sendContent; }

另外,System.arraycopy()方法看了一下源码。主要是将一个数组里copy倒另一个数组。

public static void arraycopy(Object src, int srcPos, Object dest, int destPos, int length) 代码解释:   Object src : 原数组    int srcPos : 从元数据的起始位置开始   Object dest : 目标数组   int destPos : 目标数组的开始起始位置   int length  : 要copy的数组的长度

例如:

我们有一个数组数据 byte[]  srcBytes = new byte[]{2,4,0,0,0,0,0,10,15,50};  // 源数组

                                    byte[] destBytes = new byte[5]; // 目标数组

我们使用System.arraycopy进行转换(copy)

System.arrayCopy(srcBytes,0,destBytes ,0,5) 上面这段代码就是 :

创建一个一维空数组,数组的总长度为 12位,然后将srcBytes源数组中 从0位 到 第5位之间的数值 copy 到 destBytes目标数组中,在目标数组的第0位开始放置. 那么这行代码的运行效果应该是 2,4,0,0,0,

 

 

 

最新回复(0)