TTCN-3 编码解码相关模块引入2
2023-09-11 14:20:53 时间
在编解码例子一中提到了系统例子中提供的 binary_string.c,binary_string.h 两个操作二进制串的文件,看过代码的童鞋会发现,实现是使用一个char数组来保存数据的,也就是说,每次存入提取都需要以8比特为单位。
在网络数据传输中一般是保证整字节的,但是网络协议的定义往往对每一比特位都“物尽其用”,因此在编解码的过程中往往会出现添加不是整字节单位数据的情况。
考虑下面代码,使用到TTCN-3中hexstring的类型
// 定义测试例 testcase Basic_TC () runs on MyMTC system MySUT mtc_port.clear; //不能操作sut_port,这个端口在SUT,并不在MTC的控制下 //sut_port.clear; map(mtc:mtc_port, system:sut_port); mtc_port.start; //不能操作sut_port,这个端口在SUT,并不在MTC的控制下 //sut_port.start; mtc_port.send(ABCDH); mtc_port.receive(ABCDH); mtc_port.send(ABCH); mtc_port.receive(ABC0H); setverdict(pass); stop; //控制部分 control { execute(Basic_TC());
编码函数中,碰到hexstring我们需要做出如下处理: 1.碰到偶数情况与octetstring处理方式相同 2.如果是奇数情况,需要额外多申请一个字节,该字节的高4位是数据、低4位用0填充;同时记录数据位数,继续编码时从低4位开始 在binary_string.c 中添加处理半字节的方法
/* Appends half byte to the end of binary string * Its 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;
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"); 最新内容请见作者的GitHub页:http://qaseven.github.io/
一文搞懂JS模块、模块格式、模块加载器和模块打包器(上) 接下来我们就来一起学习下js模块、模块化解决方案、模块加载器和模块打包器的区别。 本文的主要意图是帮大家快速理解现代前端JS开发的概念,并不会深入去探讨每种工具和模式。
一文搞懂JS模块、模块格式、模块加载器和模块打包器(中) 接下来我们就来一起学习下js模块、模块化解决方案、模块加载器和模块打包器的区别。 本文的主要意图是帮大家快速理解现代前端JS开发的概念,并不会深入去探讨每种工具和模式。
一文搞懂JS模块、模块格式、模块加载器和模块打包器(下) 接下来我们就来一起学习下js模块、模块化解决方案、模块加载器和模块打包器的区别。 本文的主要意图是帮大家快速理解现代前端JS开发的概念,并不会深入去探讨每种工具和模式。
// 定义测试例 testcase Basic_TC () runs on MyMTC system MySUT mtc_port.clear; //不能操作sut_port,这个端口在SUT,并不在MTC的控制下 //sut_port.clear; map(mtc:mtc_port, system:sut_port); mtc_port.start; //不能操作sut_port,这个端口在SUT,并不在MTC的控制下 //sut_port.start; mtc_port.send(ABCDH); mtc_port.receive(ABCDH); mtc_port.send(ABCH); mtc_port.receive(ABC0H); setverdict(pass); stop; //控制部分 control { execute(Basic_TC());
编码函数中,碰到hexstring我们需要做出如下处理: 1.碰到偶数情况与octetstring处理方式相同 2.如果是奇数情况,需要额外多申请一个字节,该字节的高4位是数据、低4位用0填充;同时记录数据位数,继续编码时从低4位开始 在binary_string.c 中添加处理半字节的方法
/* Appends half byte to the end of binary string * Its 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;
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"); 最新内容请见作者的GitHub页:http://qaseven.github.io/
一文搞懂JS模块、模块格式、模块加载器和模块打包器(上) 接下来我们就来一起学习下js模块、模块化解决方案、模块加载器和模块打包器的区别。 本文的主要意图是帮大家快速理解现代前端JS开发的概念,并不会深入去探讨每种工具和模式。
一文搞懂JS模块、模块格式、模块加载器和模块打包器(中) 接下来我们就来一起学习下js模块、模块化解决方案、模块加载器和模块打包器的区别。 本文的主要意图是帮大家快速理解现代前端JS开发的概念,并不会深入去探讨每种工具和模式。
一文搞懂JS模块、模块格式、模块加载器和模块打包器(下) 接下来我们就来一起学习下js模块、模块化解决方案、模块加载器和模块打包器的区别。 本文的主要意图是帮大家快速理解现代前端JS开发的概念,并不会深入去探讨每种工具和模式。
相关文章
- 记一个奇怪的编码转换问题,及探讨“错误: 编码GBK的不可映射字符” 的原因
- html实体编码遇上js代码
- JavaScript进行UTF-8编码与解码
- Eclipse(MyEclipse) 设置默认编码为Utf-8 之最全方法
- 一道C语言安全编码题目
- vue.js3: base64编码/解码(vue@3.2.37)
- 解决全站字符乱码(POST和GET中文编码问题)
- JAVA实现Base64编码的三种方式
- 【secureCRT】永久设置全局默认编码格式为UTF8,解决中文乱码
- p3c安装使用 编码规范扫描 阿里巴巴出品,挺好用的
- python模块之email: 电子邮件编码解码 (一、解码邮件)
- Atitit 视频编码与动画原理attilax总结
- Python学习10:字符串和编码
- Python编程:chardet模块检测byte字节编码
- mysql安装后改动port号password默认字符编码
- 在OpenCV里实现算术编码1
- Java核心类库之(字符集/编码集、File类、递归、IO流:字节流、字符流、特殊操作流)