【中级】报文转换

该代码实现了一个报文转换的功能,根据特定规则:0x7E转为0x7D 0x5E,0x7D转为0x7D 0x5D,并在报文首尾添加0x7E作为定界符。输入参数包括原始报文、长度和输出报文指针,返回值表示操作成功或失败。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#include <stdlib.h>
#include "OJ.h"
#include <string>
using namespace std;


/*
功能:
    将给定的报文按规则转换成另一个报文后输出。
    转换规则如下:
    报文中如果出现0x7E,转义成为2个字节0x7D 0x5E,如果出现0x7D,转义成为2个字节0x7D 0x5D。最后在报文头尾各加上一个0x7E定界。

    示例(每个字节以十六进制数表示)
    给定原始报文:1D 2B 3C 4D 5E 7E 6F 7D 7E
    转换后的报文:7E 1D 2B 3C 4D 5E 7D 5E 6F 7D 5D 7D 5E 7E

输入:
char* pInput: 给定的输入报文,内存空间由调用者申请和释放
int iLen: 给定报文的长度   
输出:
char* pOutput:转换后的报文,内存空间由调用者申请和释放
返回:
int: 成功 0, 失败 -1

*/

int PktTrans(char* pInput, int iLen, char* pOutput)
{

	if(pInput==NULL||*pInput=='\0'|| (iLen < 0) || (iLen >= 100)||pOutput==NULL)
	{
		return -1;
	}
	if(iLen==0)return 0;
	
	char temp[150];

	int i=0;
	int j=0;
	bool isIn=false;
	for(;i<iLen;i++)
	{	
			if(pInput[i]==0x7E)
			{	
				temp[j]=0x7D;
				temp[j+1]=0x5E;
				j+=2;
			
			}
			else if(pInput[i]==0x7D)
			{
				temp[j]=0x7D;
				temp[j+1]=0x5D;
				j+=2;
		
			}
			else
			{
			temp[j]=pInput[i];
			j++;
			}
	}
	temp[j]='\0';


		pOutput[0]=0x7E;
		for(int k=0;k<j;k++)
		{
			pOutput[k+1]=temp[k];
		}
		pOutput[j+1]=0x7E;
		pOutput[j+2]='\0';

	

	return 0;


		
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值