MATLAB® MATファイル形式2011b文書に基づいてMATファイル(レベル5)形式を読み込む関数をC++でコーディングしていますwww.mathworks.com/help/pdf_doc/matlab/matfile_format.pdf)。import Level 5 MATファイル形式のデータをC++のファイルから取得
バイト数フィールドがゼロであるため、何かが不足している可能性があります(おそらくC++で)。 MAT-Fileヘッダーは、データ型要素のフラグと同様に正常に読み取られますが、バイト数は正しく読み込まれません。次のようにマットのファイルをロードするためのコードの一部は次のとおりです。
// file handler
ifstream file;
// open file
file.open(i_file, ifstream::in | ifstream::binary);
// check for errors
if (!file) return NULL;
/********** BEGIN MAT-File Header **********/
char header_text[116], header_offset[8], header_version[2], header_endian[2];
// The first 116 bytes of the header can contain text data in human-readable form.
file.read((char*) &header_text, 116); cout << header_text << endl;
/* Header Subsystem Data Offset Field */
// Bytes 117 through 124 of the header contain an offset to subsystem-specific
// data in the MAT-file.
file.read((char*) &header_offset, 8); cout << header_offset << endl;
/* Header Flag Fields */
// Version When creating a MAT-file, set this field to 0x0100.
file.read((char*) &header_version, 2); cout << header_version << endl;
// Endian Indicator. Contains the two characters, M and I, written to the
// MAT-file in this order, as a 16-bit value.
file.read((char*) &header_endian, 2); cout << header_endian << endl;
/********** END MAT-File Header **********/
/********** BEGIN MAT-File Data Element **********/
/* The Tag Field */
// The 8-byte data element tag is composed of two, 32-bit fields
// Data Type
__int32_t data_type = file.get(); cout << data_type << endl;
// Number of Bytes
__int32_t num_bytes = file.get(); cout << num_bytes << endl;
次のように出力されている:
MATLAB 5.0 MAT-file, Platform: GLNXA64, Created on: Fri May 20 18:21:46 2011
IM
15
0
MATLABから、私は情報を得る:PaviaU -file
玉葉.mat
名前サイズバイトクラス属性
paviaU 610x340x103 170897600ダブル
私が間違って何とかヘッダからデータをロードしましたか? なぜバイト数はゼロに等しいですか?
編集:次のように私は、データ要素を読めば(SAは1つのコメントで提案されている):
char data_type[4], num_bytes[4];
file.read((char*) &data_type, 4); cout << data_type << endl;
file.read((char*) &num_bytes, 4); cout << num_bytes << endl;
私はcout
(バイナリコード)に予期しない値を取得
しかし、デバッグ関数私は両方の変数を検査することができます:
data_type[0] = 15
data_type[1] = 0 '\0'
data_type[2] = 0 '\0'
data_type[3] = 0 '\0'
num_bytes[0] = -3/253
num_bytes[1] = 27
num_bytes[2] = 19
num_bytes[3] = 2
data_typeの値は15ですがnum_bytes
の-3/253はどうですか?それはどれですか?仕様によると、あなたの結果は、データ型を示す
コード例のコメントでは、タグが2つの32ビットフィールドで構成されているとしています。しかし、あなたは2バイト(通常は16ビット)しか読みません。 'get()'は 'char'を1つだけ読み込みます。 – jrok
'file.read((char *)&data_type、4);'と 'file.read((char *)&num_bytes、4)'を試してください。 – jrok
@jrok提案していただきありがとうございます。新しい出力で質問を更新しました。 – pQB