长数据分包的四种实现方法(源码)

不同的方式的分包源码:

#include "stdlib.h"

typedef unsigned char uint8_t;


#define MAX_PACKAGE_LEN   8 //20 或者 64 或者 16

void uart_tx(uint8_t *wr_buf, uint8_t buf_len)
{
	uint8_t i = 0;

	if(buf_len > MAX_PACKAGE_LEN)
		return ;
/*
	for(i=0; i<buf_len; i++ )
	{
		printf("%c",*wr_buf++);
	}
*/
	printf("%.*s", buf_len, wr_buf); 
}

fenbao1(uint8_t *wr_buf, uint8_t buf_len)
{
	while(1)
	{
		if(buf_len > MAX_PACKAGE_LEN)
		{
			uart_tx(wr_buf, MAX_PACKAGE_LEN);
			buf_len -= MAX_PACKAGE_LEN;
			wr_buf += MAX_PACKAGE_LEN;
		}
		else
		{
			uart_tx(wr_buf, buf_len);
			break;
		}
	}
}

//方法二:

fenbao2(uint8_t *wr_buf, uint8_t buf_len)
{
	while(buf_len > 0)
	{
		if(buf_len > MAX_PACKAGE_LEN)
		{
			uart_tx(wr_buf, MAX_PACKAGE_LEN);
			buf_len -= MAX_PACKAGE_LEN;
			wr_buf += MAX_PACKAGE_LEN;
		}
		else
		{
			uart_tx(wr_buf, buf_len);
			buf_len = 0;
		}
	}
}


//方法三:

fenbao3(uint8_t *wr_buf, uint8_t buf_len)
{
	uint8_t zhengbao_num = buf_len / MAX_PACKAGE_LEN ;
	uint8_t sanbao_num = buf_len % MAX_PACKAGE_LEN;

	uint8_t  i = 0;

	for(i=0; i<zhengbao_num; i++ )
	{
		uart_tx(wr_buf, MAX_PACKAGE_LEN);
		wr_buf += MAX_PACKAGE_LEN;
	}

	uart_tx(wr_buf, sanbao_num);
}


//方法四:
fenbao4(uint8_t *wr_buf)
{
	uint8_t buf_len = 0;
	uint8_t tmp_buf_len = 0;
	uint8_t i=0;

	uint8_t zhengbao_num = 0;
	uint8_t sanbao_num = 0;
/*
	while(* (++wr_buf) != '\0')
	{
		buf_len ++;
	}

	printf("buf_len:%d\n",buf_len);
*/
	while(*wr_buf != '\0')
	{
		buf_len ++;
		wr_buf++;
	}
	printf("buf_len:%d\n",buf_len);
	zhengbao_num = buf_len / MAX_PACKAGE_LEN ;
	sanbao_num = buf_len % MAX_PACKAGE_LEN;	
    wr_buf -= buf_len;

	for(i=0; i<zhengbao_num; i++ )
	{
		uart_tx(wr_buf, MAX_PACKAGE_LEN);
		wr_buf += MAX_PACKAGE_LEN;
	}

	uart_tx(wr_buf, sanbao_num);
	
			
}


void main()
{
	//uint8_t tmp[] = "1234567890abcdefg\n";
	uint8_t tmp[] = "123\n";
	fenbao1(tmp, sizeof(tmp));
	fenbao2(tmp, sizeof(tmp));
	fenbao3(tmp, sizeof(tmp));
	fenbao4(tmp);
}

猜你喜欢

转载自blog.csdn.net/happygrilclh/article/details/105664182