// // C++ Implementation: test_sds_read // // Description: // // // Author: Fabrice DUCOS ; Nicolas PASCAL , (C) 2013 // // Copyright: See COPYING file that comes with this distribution // // #include "Hdf_file.hpp" #include #include using namespace std; int main(int argc, char* argv[]) { string fname("./testfile.hdf"); cout<<"***** OPEN FILE FOR READING *****"< dims(rank); int32 idim; for (idim = 0 ; idim < rank ; ++idim) dims[idim] = sds.get_dimension(idim); // total number of elements to read int sz_data = 1; for (idim = 0 ; idim < rank ; ++idim) sz_data *= dims[idim]; void * data = malloc(sz_dtype * sz_data); /** read data */ int32 start[rank]; // start position along each dimension fill_n(start, rank, 0); int32 stride[rank]; // step between elements along each dimension fill_n(stride, rank, 1); int32 edges[rank]; // number of elements to read along each dimension copy(dims.begin(), dims.end() + rank, edges); sds.read(data, start, NULL, edges); /** print it : rank and data type need to be known for it. In this case, rank is 2 and datatype is int16 */ int16 * t_data = reinterpret_cast(data); int32 sz_y = dims[0]; int32 sz_x = dims[1]; cout << "["; for (int32 i_y = 0 ; i_y < sz_y ; ++i_y) { cout << "["; for (int32 i_x = 0 ; i_x < sz_x ; ++i_x) { cout << (int16)(t_data[i_y * sz_y + i_x]); if (i_x < (sz_x - 1)) cout << ", "; } cout << "]"; if (i_y < (sz_y - 1)) cout << endl; } cout << "]" << endl; return 0; }