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

我这边包头定义是

包长度(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,

发布了141 篇原创文章 · 获赞 33 · 访问量 5万+

猜你喜欢

转载自blog.csdn.net/qq_43560721/article/details/102831777