TTCN-3 编码解码相关模块引入2

发表于:2013-12-03 11:56

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:温软的小刀    来源:51Testing软件测试网采编

分享:
  编码函数中,碰到hexstring我们需要做出如下处理:
  1.碰到偶数情况与octetstring处理方式相同
  2.如果是奇数情况,需要额外多申请一个字节,该字节的高4位是数据、低4位用0填充;同时记录数据位数,继续编码时从低4位开始
  在binary_string.c 中添加处理半字节的方法
/* Appends half byte to the end of binary string
* It's assumed that binary string has enough free space
*/
static void append_half_byte (MyBinaryString *string, unsigned char data)
{
unsigned long free_pos;
free_pos = string->string.bits/8;
string->string.data[free_pos] = data;
string->string.bits += 4;
}
  在tci_codec.c中添加hexstring编码函数
//对hexstring类型的数据进行编码
void encode_hexstring(MyBinaryString *msg, String str)
{
unsigned char * binstr;
unsigned char binvalue;
unsigned long len;
int i,k;
printf("\n In function encode_hexstring() \n");
//输入的字符串中含有前后双引号和H,将它们去掉
len = str?strlen(str):0;
for(i=0;i<len-3;i++){
str[i]=str[i+1];
}
str[i]='\0';
len=strlen(str);//the new length
if(len%2==0){//偶数的话与处理octetstring相同
binstr =(unsigned char *)malloc(len);
char2hex_encode(msg,str,binstr);
binary_string_append_bytes(msg, binstr, len/2);
}else{
//基数的话先处理前面的偶数个字符
binstr =(unsigned char *)malloc(len);
//先把最后一个字符保存起来
binvalue = str[i-1];
str[i-1] = '\0';
char2hex_encode(msg,str,binstr);
binary_string_append_bytes(msg, binstr, len/2);
//处理最后一个字节,不够的用0填充
len += 1;
if(((binvalue-'0')>=0)&&((binvalue-'9')<=0)) {
binvalue = (binvalue-'0')*16;
} else if(((binvalue-'A')>=0)&&((binvalue-'F')<=0)) {
binvalue = (binvalue-'A'+10)*16;
} else if(((binvalue-'a')>=0)&&((binvalue-'f')<=0)) {
binvalue = (binvalue-'a'+10)*16;
} else {
tci_assert(0, "Wrong hex string: the value should be between 0~9, a~f");
}
binary_string_append_char(msg,binvalue);
}
printf("\n Leave function encode_hexstring() \n");
}
相关文章:
 TTCN-3 编码解码相关模块引入
22/2<12
重磅发布,2022软件测试行业现状调查报告~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计

法律顾问:上海漕溪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2023
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号