LoadRunner下的TCP协议:如何将普通十六进制字符串转为LR可识别的十六进制格式

      最近发现一个很恶心的东西就是,如果你在LR-socket协议下写脚本的时候,会遇到一个问题,普通的十六进制格式LR根本不识别。

  例: 获取本地时间,并将时间戳转为十六进制后,再转为LR可识别的十六进制参数  

假设这是我们获取之后的16进制字符串(如何获取本地时间戳可以参考我的上篇文章):31 36 37 33 32 34 39 33 33 33

在LR中,这一类的字符串需要转为 \x31\x36\x37\x33\x32\x34\x39\x33\x33\x33 这种格式才能被正确识别。在字数少的时候,我们可以手动修改,但是我遇到的问题是这个字符串是参数化之后保存的时间戳,那如何将这个16进制的时间戳整合到报文中发送呢

首先我们要写一个将时间戳转为普通十六进制的方法:

void string2hexString(char* input, char* output)
{
    int loop;
    int i; 
    
    i=0;
    loop=0;
    
    while(input[loop] != '\0')
    {
        sprintf((char*)(output+i),"%02X", input[loop]);
        loop+=1;
        i+=2;
    }
    
    output[i++] = '\0';
}

这个方法要放在你脚本最前面的#include "lrs.h" 下

 别忘了定义变量要在你脚本开始之前,而不是再脚本中定义

 然后我们将普通十六进制转为可识别的十六进制,并输出检查是否正确,

lrs_startup(257);
     t1=time();//获取当前系统时间

     sprintf(a,"%d",t1);//将t1存进数组a

     lr_save_string(a,"time2");//将数组a存成字符串参数time2

     lr_output_message("当前时间戳是%s",lr_eval_string("{time2}"));//获取当前时间戳单位至秒
   
     string2hexString(a,hex_str);
    
     lr_output_message("转换为16进制字符串为: %s\n", lr_eval_string(hex_str));
	 

	 psrcs=lr_eval_string(hex_str);

	 z=0;

	  //将16进制字符串转为lr发送的16进制格式,比如:"\xDB"
	 for(j=0;*psrcs;j++)
	  {
		  strcpy(dsts,"\\x");

		  strncat(dsts,psrcs,2);

		  psrcs+=2;

			  for (k=0;k<strlen(dsts);k++) {

		   buff[z++]=dsts[k];

		 }
	   }
	 lr_output_message("转换为可发送的16进制: %s",buff);
     

运行脚本,查看结果

 大功告成~

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值