使用Matio库将.mat文件中的字符串读取到C++中

Using Matio Library to read a string from a .mat file into C++

本文关键字:字符串 读取 C++ 使用 库将 mat 文件 Matio      更新时间:2023-10-16

我使用matio库在C++代码中输入.mat文件。它适用于数值;但我在读取字符数组时遇到问题。

  int   start[2]={0,0},stride[2]={1,1},edge[2]={1,1};
  mat_t  *mat;
  matvar_t *matvar, matvar1;
  mat = Mat_Open("test.mat",MAT_ACC_RDONLY);
  matvar = Mat_VarReadInfo(mat,"data");
  matvar1 = Mat_VarGetStructFieldByName(matvar,"name",0);
  char ptr[matvar2->dims[1]];
  edge[0] = matvar2->dims[0];
  edge[1] = matvar2->dims[1];
  Mat_VarReadData(mat,matvar2,ptr_string,start,stride,edge);

Mat_VarReadData将数据从Mat写入ptr_string,其中matvar2是指向名称结构的指针。

如前所述,这适用于数值;但对于角色,我不理解所谓的猜谜游戏。也许格式不对。

当通道是字符串列表时,这对我有效:

    mat_t* mat = Mat_Open(fileName, MAT_ACC_RDONLY);
    matvar_t* channels{};
    channels = Mat_VarRead(mat, (char*)"Channels");
    if (channels)
        {
            //print individual
            matvar_t** cells = static_cast<matvar_t**>(channels->data);
            printf("{n");
            for (int i{}; i < channels->dims[1]; i++)
            {
                //Mat_VarPrint(cells[i], 1);
                std::cout << static_cast<char*>(cells[i]->data) << 'n';
            }
            printf("}n");
            Mat_VarFree(channels);
        }
    Mat_Close(mat);