如何对切片后的数值按列求和?附相关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
相关产品推荐
相关产品推荐

