You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何对切片后的数值按列求和?附相关C++代码与数据样例

C语言实现切片数组按列求和方案

前提说明

你当前的切片规则为32位BYTE数组按每行8个元素切割,共得到4行8列的二维数值矩阵,可直接基于原一维BYTE数组计算列和,不需要额外存储二维切片结果。

核心实现逻辑

  • 定义固定列数为8、行数为4,与切片规则匹配
  • 初始化长度为8的数组存储每列求和结果,初始值全部置0
  • 外层循环遍历每一列,内层循环遍历所有行,累加当前列对应位置的元素值

完整代码实现

首先补充列求和函数,再修改main函数调用即可:

#include <stdio.h>
#include <string.h>
// 假设BYTE是unsigned char的别名,若你项目中已有定义可删除该行
typedef unsigned char BYTE;

// 你原有的函数声明
void SerialtoByte(char* serial, BYTE* arr);
void sliceKey(BYTE* arr);

// 新增列求和函数
void calcColumnSum(BYTE* arr, int row_num, int col_num, int* col_sum) {
    memset(col_sum, 0, col_num * sizeof(int));
    for (int col = 0; col < col_num; col++) {
        for (int row = 0; row < row_num; row++) {
            // 一维数组映射二维坐标:行索引*每行元素数 + 列索引
            col_sum[col] += arr[row * col_num + col];
        }
    }
}

int main(void)
{
    char serial[] = "XQXQT6FM6YNN26PNRM1S7QRESA0W01TV";
    
    //获取serial的长度
    int len_key = strlen(serial);
    BYTE arr[len_key];
    int i;

    //将字符串转换为BYTE数组
    SerialtoByte(serial, arr);
    
    for(i=0; i<len_key; i++)
    {
        cout<<" "<<arr[i];
    }
    
    cout<<"\n\n";
    sliceKey(arr);
    cout<<"\n\n";

    // 新增求和逻辑
    const int ROW_CNT = 4;
    const int COL_CNT = 8;
    int col_sum[COL_CNT];
    calcColumnSum(arr, ROW_CNT, COL_CNT, col_sum);

    // 打印每列求和结果
    cout<<"每列求和结果为:"<<endl;
    for(i=0; i<COL_CNT; i++)
    {
        cout<<"第"<<i+1<<"列总和:"<<col_sum[i]<<endl;
    }
    return 0;
}

结果验证

以你给出的切片数值计算,第一列求和结果为88+54+82+83=307,第二列为81+89+77+65=312,其余列可运行代码自行验证。

内容的提问来源于stack exchange,提问作者Lemuel Fajarda

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 09:06:07