当前位置: 首页 > news >正文

wow-byte-array数组操作说明

wow-byte-array文件说明

  • 项目地址:https://github.com/wow-iot3/wow_linux_eval
  • 本文件的的功能实现类似于QByteArray类,用于处理数组类相关操作,主要涉及数组类的创建、删除、增添、移除、截断、查找、替换等操作;
  • 注:动态数组内部默认分配字节大小为128;当添加内容导致内部长度不够时,则分配当前容量*2个字节以供存储;

数组类创建与删除

ByteArray_T* wow_byte_array_new(void) { ByteArray_T* array = CALLOC(1, ByteArray_T); CHECK_RET_VAL_ERRNO_P(array,SYSTEM_MALLOC_FAILED,"malloc ByteArray_T failed!\n"); memset(array,0,sizeof(ByteArray_T)); array->size = 0; array->capicity = DEFALUT_BYTE_ARRAY_SZIE; array->data = MALLOC(DEFALUT_BYTE_ARRAY_SZIE); CHECK_RET_GOTO_ERRNO_P(array->data,out,SYSTEM_MALLOC_FAILED,"malloc size(%d) failed!\n",DEFALUT_BYTE_ARRAY_SZIE); memset(array->data,0,DEFALUT_BYTE_ARRAY_SZIE); return array; out: FREE(array); return NULL; } void wow_byte_array_free(ByteArray_T** pptArray) { CHECK_RET_VOID(pptArray && *pptArray); ByteArray_T* array = (ByteArray_T*)*pptArray; if(array->data){ FREE(array->data); } array->data = NULL; FREE(array); *pptArray = NULL; }

数组类追加字段

int wow_byte_array_append_data(ByteArray_T* ptArray, uint8_t u8Value) { CHECK_RET_VAL_P(ptArray,-PARAM_INPUT_STRUCT_IS_NULL,"param input struct invalid!\n"); if(ptArray->size >= ptArray->capicity) { byte_array_resize(ptArray,ptArray->size*2); } ptArray->data[ptArray->size++] = u8Value; return WOW_SUCCESS; } int wow_byte_array_append_ndata(ByteArray_T* ptArray, uint8_t* u8Value,uint8_t snLen) { CHECK_RET_VAL_P(ptArray,-PARAM_INPUT_STRUCT_IS_NULL,"param input struct invalid!\n"); CHECK_RET_VAL_P(u8Value,-PARAM_INPUT_DATA_IS_NULL,"param input data invalid!\n"); if(ptArray->size + snLen >= ptArray->capicity) { size_t nsize = (ptArray->size + snLen > (ptArray->size)*2)?ptArray->size + snLen:(ptArray->size)*2; byte_array_resize(ptArray,nsize); } memcpy(&ptArray->data[ptArray->size],u8Value,snLen); ptArray->size += snLen; return WOW_SUCCESS; } int wow_byte_array_append_array(ByteArray_T* ptArray, ByteArray_T* ptToadd) { CHECK_RET_VAL_P(ptArray && ptToadd ,-PARAM_INPUT_STRUCT_IS_NULL,"param input struct invalid!\n"); if(ptToadd->size >= ptArray->capicity - ptArray->size) { byte_array_resize(ptArray,ptToadd->size*2); } memcpy(&ptArray->data[ptArray->size],ptToadd->data,ptToadd->size); return WOW_SUCCESS;

}

数组类截取字段

int wow_byte_array_left(ByteArray_T* ptArray,size_t snLen) { CHECK_RET_VAL_P(ptArray,-PARAM_INPUT_STRUCT_IS_NULL,"param input struct invalid!\n"); CHECK_RET_VAL_P(ptArray->size > snLen,-PARAM_INPUT_ARG_INVALID,"param input arg invalid!\n"); memset(&ptArray->data[snLen],0,ptArray->size - snLen); ptArray->size = snLen; return WOW_SUCCESS; } int wow_byte_array_right(ByteArray_T* ptArray,size_t snLen) { CHECK_RET_VAL_P(ptArray,-PARAM_INPUT_STRUCT_IS_NULL,"param input struct invalid!\n"); CHECK_RET_VAL_P(ptArray->size > snLen,-PARAM_INPUT_ARG_INVALID,"param input arg invalid!\n"); memmove(ptArray->data,&ptArray->data[ptArray->size - snLen],snLen); memset(&ptArray->data[snLen],0,ptArray->size - snLen); ptArray->size = snLen; return WOW_SUCCESS; } int wow_byte_array_mid(ByteArray_T* ptArray,size_t snIdx, size_t snLen) { CHECK_RET_VAL_P(ptArray,-PARAM_INPUT_STRUCT_IS_NULL,"param input struct invalid!\n"); CHECK_RET_VAL_P(snIdx < ptArray->size,-PARAM_INPUT_ARG_INVALID,"param input arg invalid!\n"); if(ptArray->size > (snLen +snIdx)){ memmove(ptArray->data,&ptArray->data[snIdx],ptArray->size - snLen); memset(&ptArray->data[snLen],0,ptArray->size - snLen); ptArray->size = snLen; }else{ memmove(ptArray->data,&ptArray->data[snIdx],ptArray->size-snIdx); memset(&ptArray->data[snLen],0,ptArray->size-snIdx); ptArray->size = ptArray->size-snIdx; } return WOW_SUCCESS; }

数组类字段查找

int wow_byte_array_find(ByteArray_T* ptArray,uint8_t u8Value) { int i = 0; CHECK_RET_VAL_P(ptArray,-PARAM_INPUT_STRUCT_IS_NULL,"param input struct invalid!\n"); for ( i = 0; i < ptArray->size; i++ ) { if (u8Value == ptArray->data[i]) { return i; } } return -BYTE_ARRAY_NOT_FIND; }

数组类字段替换

int wow_byte_array_replace(ByteArray_T* ptArray,uint8_t u8Obj,uint8_t u8Value) { int i = 0; CHECK_RET_VAL_P(ptArray,-PARAM_INPUT_STRUCT_IS_NULL,"param input struct invalid!\n"); for ( i = 0; i < ptArray->size; i++ ) { if (u8Obj == ptArray->data[i]) { ptArray->data[i] = u8Value; } } return WOW_SUCCESS; }

数组类字段删除

int wow_byte_array_remove(ByteArray_T* ptArray, size_t snIdx ,size_t snLen) { CHECK_RET_VAL_P(ptArray,-PARAM_INPUT_STRUCT_IS_NULL,"param input struct invalid!\n"); CHECK_RET_VAL_P(snIdx < ptArray->size,-PARAM_INPUT_ARG_INVALID,"param input arg invalid!\n"); if(ptArray->size > (snLen +snIdx)){ memmove(ptArray->data,&ptArray->data[snIdx+snLen],ptArray->size - snLen); memset(&ptArray->data[ptArray->size - snLen],0,snLen); ptArray->size = ptArray->size - snLen; }else{ memset(&ptArray->data[snIdx],0,ptArray->size-snIdx); ptArray->size = snIdx; } return WOW_SUCCESS; }
http://www.jsqmd.com/news/478599/

相关文章:

  • ffmpeg将mp4转换为swf、视频格式、m3u8等
  • 从零开始学习DeepSeek-Prover-V1.5-SFT:面向数学爱好者的入门教程
  • 如何在 React 项目中快速集成 Google Map React:10分钟上手教程
  • 如何快速上手LedisDB:高性能NoSQL数据库的完整指南
  • 如何构建团队密码管理系统:gopass的设计哲学与架构深度解析
  • 随心所欲画草神器:3DMAX种草画笔GrassPainter
  • 电子商务专业毕业生职业发展路径与核心能力构建研究
  • 如何使用CoreRT:.NET Core终极AOT编译优化指南
  • 目前最全的计算机视觉公开数据集汇总 持续更新 400+数据集
  • WHAT - 浏览器缓存机制系列(二)强缓存、协商缓存和启发式缓存
  • CausalML高级技巧:特征选择与因果效应异质性分析
  • ROS以及工控机环境配置
  • Gorilla技术播客系列:与AI先驱探讨函数调用的未来
  • 去毛刺机设计(机械毕业设计)
  • 为什么我的电脑不能升级Windows 11?终极兼容性检测工具深度解析
  • OCRmyPDF内存优化:处理大型PDF文件的内存管理技巧
  • Leetcode_155. 最小栈
  • 软考中级--数据库系统工程师 备考建议和考试注意事项
  • 电脑CPU速度很快,为什么3dMax还会出现卡顿的情况?
  • 牛客_JZ31 栈的压入、弹出序列
  • Slurm高级特性详解:QoS、资源限制与作业优先级配置指南
  • Gorilla网络安全应用:威胁检测API集成与响应自动化完整指南
  • Leetcode_43. 字符串相乘
  • 【C++BFS】690. 员工的重要性
  • 【AutoSAR】只讲干货!使用EB Tresos配置Port
  • 终极指南:Upspin核心架构完全解析——三大服务如何构建全球命名系统
  • 【亲测免费】推荐项目:Dubbo Spring Boot Starter - 简化你的微服务开发
  • 从XML到JSON:Proteus如何革命性重构Android动态布局开发
  • 【亲测免费】 推荐使用:KCloud-Platform-IoT - 超强微服务架构的物联网云平台
  • SpringBoot集成RestTemplate请求高德地图API