整数に変換する必要がある生のバイナリ データを含む文字列を取得しています。問題は、これらの値が常に同じ順序であるとは限らず、常に表示されるとは限らないことです。そのため、バイナリ データの形式は構成ファイルに記述され、バイナリ データから読み取られる値の型はコンパイル時にはわかりません。
私はこれに似た解決策を考えています:
enum BinaryType {
TYPE_UINT16,
TYPE_UNIT32,
TYPE_INT32
};
long convert(BinaryType t, std::stringstream ss) {
long return_value;
switch(t) {
case TYPE_UINT16:
unsigned short us_value;
ss.read(&us_value, sizeof(unsigned short));
return_value = short;
break;
case TYPE_UINT32:
unsigned int ui_value;
ss.read(&ui_value, sizeof(unsigned int));
return_value = ui_value;
break;
case TYPE_INT32:
signed int si_value;
ss.read(&si_value, sizeof(signed int));
return_value = si_value;
break;
}
return return_value;
}
目標は、これらの値を 10 進数で出力することです。
私の質問は次のとおりです。
- このコードは非常に反復的です。もっと簡単な解決策はありますか?(テンプレート?)
signed int
値を 32 ビットにする必要がある場合など、標準型を使用する必要がありますか? 代わりに何を使用しますか?エンディアン?