存地址实现组包逻辑的一个测试代码。

简介: 存地址实现组包逻辑的一个测试代码。

汇总:柔性数组配合指针数组的方式,实现组包的逻辑的测试。

保存了收到的包,可以扩展结构体,对收到的包做处理。

在业务功能代码的实现中,涉及到组包的逻辑:

第一想法想到定义指针数组,用指针数组来实现包的判断以及重组。

配合结构体的柔性数组特性,这里尝试了一下实现方案:

1:我可以保存每个包的地址,存储包头信息做校验实现。

涉及到的知识点:如何存储,目标是存储多个指针,个数是不定的(根据头信息解析)
  char**a 是二级指针,其实就是指针的指针,初始化的时候注意不能直接用*a去赋值,要正确初始化。
  char* data[] []的优先级高于*,是一个char* 数组,每个元素存储的都是一个char*
    ==》起始就是指针数组
  其他: 数组指针,起始就是数组的指针,存放了一个数组的地址,+表示了加数组的长度
      char (*pa)[4];    char[4](*pa);

2:这里可以用指针数组,参考柔性数组的逻辑实现我想要的功能:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
///怎么验证一下,存储结构体的指针的方案是对的
typedef struct test_t
{
  int type;
  char data;
}TEST_T;
//如果用data存储结构体的多个地址,是否可行?
typedef struct data_t
{
  TEST_T* data[0];  //指向了数组的首地址  数组的大小由其他元素控制
}DATA_T;
//指针数组
int main()
{
  DATA_T * tt = (DATA_T*)malloc(sizeof(char*)* 3);
  for(int i =0; i<3; i++)
  {
    TEST_T * yy = (TEST_T*)malloc(sizeof(TEST_T));
    yy->type = i;
    tt->data[i] = yy;
  }
  for(int i=0;i<3;i++)
  {
    TEST_T * ret = tt->data[i];//数组的指针  这里如果用地址+1就会出问题
    if(ret == NULL)
    {
      printf("ret is null. %d \n",i);
    }else
    {
      printf("get ret success ret type %d, i %d \n", ret->type, i);
      free(ret);
      ret = NULL;
    }
  }
  if(tt != NULL)
  {
    printf("free tt \n");
    free(tt);
    tt = NULL;
  }
  return 0;
}

3:指针其实就是地址,操作系统中地址的长度是固定的,

我试了一下,64位都是8字节,那么,是不是可以涉及通用一点的处理?

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
///怎么验证一下,存储结构体的指针的方案是对的
typedef struct test_t
{
  int type;
  char data;
}TEST_T;
//如果用data存储结构体的多个地址,是否可行?
typedef struct data_t
{
  char* data[0];  //指向了数组的首地址  数组的大小由其他元素控制
}DATA_T;
//指针数组
int main()
{
  DATA_T * tt = (DATA_T*)malloc(sizeof(char*)* 3);
  for(int i =0; i<3; i++)
  {
    TEST_T * yy = (TEST_T*)malloc(sizeof(TEST_T));
    yy->type = i;
    tt->data[i] = (char*)yy;
  }
  for(int i=0;i<3;i++)
  {
    TEST_T * ret = (TEST_T *)tt->data[i]; //数组的指针  这里如果用地址+1就会出问题
    if(ret == NULL)
    {
      printf("ret is null. %d \n",i);
    }else
    {
      printf("get ret success ret type %d, i %d \n", ret->type, i);
      free(ret);
      ret = NULL;
    }
  }
  if(tt != NULL)
  {
    printf("free tt \n");
    free(tt);
    tt = NULL;
  }
  return 0;
}
目录
相关文章
|
1月前
|
数据采集 机器学习/深度学习 大数据
行为检测代码(一):超详细介绍C3D架构训练+测试步骤
这篇文章详细介绍了C3D架构在行为检测领域的应用,包括训练和测试步骤,使用UCF101数据集进行演示。
43 1
行为检测代码(一):超详细介绍C3D架构训练+测试步骤
|
1月前
|
机器学习/深度学习 人工智能 监控
提升软件质量的关键路径:高效测试策略与实践在软件开发的宇宙中,每一行代码都如同星辰般璀璨,而将这些星辰编织成星系的过程,则依赖于严谨而高效的测试策略。本文将引领读者探索软件测试的奥秘,揭示如何通过精心设计的测试方案,不仅提升软件的性能与稳定性,还能加速产品上市的步伐,最终实现质量与效率的双重飞跃。
在软件工程的浩瀚星海中,测试不仅是发现缺陷的放大镜,更是保障软件质量的坚固防线。本文旨在探讨一种高效且创新的软件测试策略框架,它融合了传统方法的精髓与现代技术的突破,旨在为软件开发团队提供一套系统化、可执行性强的测试指引。我们将从测试规划的起点出发,沿着测试设计、执行、反馈再到持续优化的轨迹,逐步展开论述。每一步都强调实用性与前瞻性相结合,确保测试活动能够紧跟软件开发的步伐,及时适应变化,有效应对各种挑战。
|
2月前
|
Web App开发 JavaScript 前端开发
添加浮动按钮点击滚动到网页底部的纯JavaScript演示代码 IE9、11,Maxthon 1.6.7,Firefox30、31,360极速浏览器7.5.3.308下测试正常
添加浮动按钮点击滚动到网页底部的纯JavaScript演示代码 IE9、11,Maxthon 1.6.7,Firefox30、31,360极速浏览器7.5.3.308下测试正常
|
1月前
|
自然语言处理 机器人 Python
ChatGPT使用学习:ChatPaper安装到测试详细教程(一文包会)
ChatPaper是一个基于文本生成技术的智能研究论文工具,能够根据用户输入进行智能回复和互动。它支持快速下载、阅读论文,并通过分析论文的关键信息帮助用户判断是否需要深入了解。用户可以通过命令行或网页界面操作,进行论文搜索、下载、总结等。
50 1
ChatGPT使用学习:ChatPaper安装到测试详细教程(一文包会)
|
1月前
|
SQL 分布式计算 Hadoop
Hadoop-14-Hive HQL学习与测试 表连接查询 HDFS数据导入导出等操作 逻辑运算 函数查询 全表查询 WHERE GROUP BY ORDER BY(一)
Hadoop-14-Hive HQL学习与测试 表连接查询 HDFS数据导入导出等操作 逻辑运算 函数查询 全表查询 WHERE GROUP BY ORDER BY(一)
41 4
|
1月前
|
SQL
Hadoop-14-Hive HQL学习与测试 表连接查询 HDFS数据导入导出等操作 逻辑运算 函数查询 全表查询 WHERE GROUP BY ORDER BY(二)
Hadoop-14-Hive HQL学习与测试 表连接查询 HDFS数据导入导出等操作 逻辑运算 函数查询 全表查询 WHERE GROUP BY ORDER BY(二)
35 2
|
2月前
|
SQL JavaScript 前端开发
基于Python访问Hive的pytest测试代码实现
根据《用Java、Python来开发Hive应用》一文,建立了使用Python、来开发Hive应用的方法,产生的代码如下
70 6
基于Python访问Hive的pytest测试代码实现
|
2月前
|
Java C++
代码文件间重复性测试
本文介绍了如何使用代码相似性检测工具simian来找出代码文件中的重复行,并通过示例指令展示了如何将检测结果输出到指定的文本文件中。
|
2月前
|
测试技术 UED
软件测试的艺术:从代码到品质的探索之旅
在数字时代的浪潮中,软件已成为我们生活和工作不可或缺的一部分。然而,高质量的软件背后隐藏着一门鲜为人知的艺术——软件测试。本文将带你走进这门艺术的世界,从基础理论到实践应用,一起探索如何通过软件测试保障产品质量,提升用户体验,并最终实现从代码到品质的华丽转变。
|
2月前
|
敏捷开发 安全 测试技术
软件测试的艺术:从代码到用户体验的全方位解析
本文将深入探讨软件测试的重要性和实施策略,通过分析不同类型的测试方法和工具,展示如何有效地提升软件质量和用户满意度。我们将从单元测试、集成测试到性能测试等多个角度出发,详细解释每种测试方法的实施步骤和最佳实践。此外,文章还将讨论如何通过持续集成和自动化测试来优化测试流程,以及如何建立有效的测试团队来应对快速变化的市场需求。通过实际案例的分析,本文旨在为读者提供一套系统而实用的软件测试策略,帮助读者在软件开发过程中做出更明智的决策。