ハイパースペクトルデータ(画像、ピクセル強度を与える多くの整数)をベクトルに読み取るネットからのコードがあります。Linux システムでコードを使用して成功しましたが、Windows システムでも同じコードが必要です。Visual Studio 2008 を使用しています。
Linux でデータを読み取ると、整数でいっぱいのベクトルが得られます。Windowsでは、整数を取得してから、いくつかの文字またはバイトデータを取得します。私はそれをよりよく説明するのに十分な知識がありません。
ベクトルは次のように初期化されます。
std::vector< unsigned short int > data;
data.resize( samples * lines * bands );
std::fill( data.begin(), data.end(), 0 );
関連するコードは
for( unsigned int i=0; i < num_pixels && file; ++i ){
char number[sizeof(DataType)];
file.read( number , sizeof( DataType ) );
int l = sizeof(DataType)-1;
if (machine_endian != header.big_endian) {
for (int j = 0; j < l; j++, l--){
number[j] ^=number[l];
number[l] ^= number[j];
number[j] ^= number[l];
}
}
unsigned short temp = *((unsigned short int*)number);
data[i] = temp;
}
machine_endian 部分は実行されません。temp は、数値を int にキャストできるかどうかをテストするためのものです。それは正常に動作します。ただし、temp をベクターに入れると、int だけでなく、より多くの情報が挿入され、wchar_t としてリストされます。下の画像を参照してください。文字サイズと関係があると思いますが、その理由はわかりません。それは私のせいですか、それともVisual Studioのせいですか? 何か案は?