首页 > 其他分享 >数组按照索引切割

数组按照索引切割

时间:2023-01-04 18:35:45浏览次数:39  
标签:index 切割 int 索引 buffer 数组 buffInfo dataMaxLen

typedef struct 
{
    unsigned char *buffer;//待切割数据
    unsigned int bufferLen;//待切割数据长度
    unsigned int index;//当前切割数据索引
    unsigned int dataMaxLen;//每次切割数据最大长度
    unsigned int resultDataLen;//当前索引切割数据长度
    unsigned int resultIndex;//切割数据在buffer中的索引
}GetBuff_TypeDef;  

int getBufferByIndex(GetBuff_TypeDef *buffInfo)
{
    if(buffInfo->buffer == 0 || buffInfo->bufferLen == 0 || buffInfo->dataMaxLen == 0)
    {
        return -1;//参数错误
    }
    //计算需要切割的次数
    unsigned int cutCount = buffInfo->bufferLen / buffInfo->dataMaxLen;
    if(buffInfo->bufferLen % buffInfo->dataMaxLen != 0)
    {
        cutCount++;
    }
    if(buffInfo->index > cutCount)
    {
        return -2;//索引超出范围
    }
    //计算当前索引切割数据长度
    if(buffInfo->index == cutCount - 1)
    {
        if(buffInfo->bufferLen % buffInfo->dataMaxLen != 0)
        {
            buffInfo->resultDataLen = buffInfo->bufferLen % buffInfo->dataMaxLen;
        }
        else
        {
            buffInfo->resultDataLen = buffInfo->dataMaxLen;
        }
        buffInfo->resultIndex = buffInfo->index * buffInfo->dataMaxLen;
        return 1;
    }
    else
    {
        buffInfo->resultDataLen = buffInfo->dataMaxLen;
    }
    //计算当前索引切割数据在buffer中的索引
    buffInfo->resultIndex = buffInfo->index * buffInfo->dataMaxLen;
    return 0;
}

void testBuff()
{
    GetBuff_TypeDef buffInfo;
    buffInfo.buffer = malloc(1000+5);
    buffInfo.bufferLen = 1000+5;
    buffInfo.dataMaxLen = 100;
    buffInfo.index = 0;
    for(int i = 0; i < 1000+5; i++)
    {
        buffInfo.buffer[i] = i;
    }

    int ret = 0;
    while (ret == 0)
    {
        ret = getBufferByIndex(&buffInfo);
        if(ret >= 0)
        {
            logDebug("------------------------------");
            logDebug("index:%d, resultDataLen:%d, resultIndex:%d", buffInfo.index, buffInfo.resultDataLen, buffInfo.resultIndex);
            for(int i = 0; i < buffInfo.resultDataLen; i++)
            {
                logDebug("buffer[%d]:%d", buffInfo.resultIndex + i, buffInfo.buffer[buffInfo.resultIndex + i]);
            }
            buffInfo.index++;
        }
    }
    

}

 

标签:index,切割,int,索引,buffer,数组,buffInfo,dataMaxLen
From: https://www.cnblogs.com/yuqilihualuo/p/17025699.html

相关文章

  • shell数组
    shell数组shell数组中只有一维数组,没有二维数组。下标从0开始,不需要初始化数组大小。1、语法array_name=(value1value2...valuen)简单的创建:#!/bin/bashmy_arra......
  • 初学算法 | 数组的基本操作
    算法专题时间复杂度数据结构的使用经典算法思想树的概念与操作搜索的实践与应用动态规划(一)综合训练数据结构集合、列表和数组区分数组操作1、读取元......
  • PostGIS之空间索引
    1.概述PostGIS是PostgreSQL数据库一个空间数据库扩展,它添加了对地理对象的支持,允许在SQL中运行空间查询PostGIS官网:AboutPostGIS|PostGISPostGIS官方教程:PostGIS......
  • 26. 删除有序数组中的重复项
    classSolution{public:intremoveDuplicates(vector<int>&nums){intn=nums.size();if(n==0)return0;//边界判断int......
  • 百万并发场景中倒排索引与位图计算的实践
    作者:京东物流郎元辉背景Promise时效控单系统作为时效域的控制系统,在用户下单前、下单后等多个节点均提供服务,是用户下单黄金链路上的重要节点;控单系统主要逻辑是针对用......
  • 数组
    数组(Array),是多个相同类型数据按一定顺序排列的集合,并使用一个名字命名,并通过编号的方式对这些数据进行统一管理数组的常见概念:数组名下标(或索引)元素数组的长度......
  • mysql索引简谈
                           mysql索引简谈 一、什么是索引就好比我们在看一本书的时候,有目录的话,我们可以快速定位到想看......
  • 【数据库】浅析Innodb的聚集索引与非聚集索引
    Mysql存储引擎之一的Innodb的索引,可以分为聚集索引与非聚集索引,这两种索引都是使用B+树组织的。本文不讲解什么是索引,对索引不了解的同学可以先移步到我的另外一篇文章【......
  • 数组转List的方法
    数组转List的方法:String[]s=newString[2];s[0]="abc";s[1]="qaz";方法一:Arrays.asList(s)List<String>list=Arrays.asList(s);list.add("efgk");//报错li......
  • leetcode-643. 子数组最大平均数 I
    643.子数组最大平均数I-力扣(Leetcode)滑动窗口,判断好边界条件即可funcfindMaxAverage(nums[]int,kint)float64{begin,end:=0,k-1ifend>=len(n......