c++ 读取不了hdf5文件中的字符串

问题描述:

在拿到一个hdf5文件,想用c++去读取文件中的字符串,但是会报错:read failed

ps: c++读取hdf5的字符串方法见:https://support.hdfgroup.org/ftp/HDF5/examples/misc-examples/stratt.cpp

具体错误信息如下:

HDF5-DIAG: Error detected in HDF5 (1.8.16) thread 140492203562816:
  #000: ../../../src/H5Dio.c line 173 in H5Dread(): can't read data
    major: Dataset
    minor: Read failed
  #001: ../../../src/H5Dio.c line 425 in H5D__read(): unable to set up type info
    major: Dataset
    minor: Unable to initialize object
  #002: ../../../src/H5Dio.c line 958 in H5D__typeinfo_init(): unable to convert between src and dest datatype
    major: Dataset
    minor: Feature is unsupported
  #003: ../../../src/H5T.c line 4548 in H5T_path_find(): no appropriate function for conversion path
    major: Datatype
    minor: Unable to initialize object
terminate called after throwing an instance of 'H5::DataSetIException'

  

这很有可能是因为这个hdf5文件不是用c++创建的,而是用python中的h5py库创建的,h5py库创建的hdf5文件,对于字符串会有编码方式的一些问题,当然python的隐式类型的特征,输出可以直接赋值给未指定类型的变量,这种特性使得,python下创建的hdf5文件,可以在python下使用。然而用在其他语言上时,字符串的问题就突出出来了。

 

所以针对上面的字符串读取不了的问题,我的解决方法是,用c++去重新创建和读取。

具体操作方式,我的思路就是,可以先把python创建的hdf5文件中的字符串用python读出来,然后写到txt文件里,然后c++读取再创建。

当然,我认为平时就不要用python中的h5py库去创建了,直接用c++创建就可以了,毕竟c++创建的python可以用,python创建的c++用不了。。。

 

如果你知道怎么用c++去读取python下创建的hdf5文件中的字符串,希望你能留个言。我尝试了很多方法,都没成功,所以上面的方法只是一种很无奈的方法,但是可以解决这个问题。

 

posted @ 2019-04-09 15:48  立冬以东  阅读(1205)  评论(0编辑  收藏  举报