하이퍼 스펙트 럴 데이터 (이미지, 픽셀 강도를주는 많은 정수)를 그물로 읽는 일부 코드가 벡터에 있습니다. 리눅스 시스템에서 성공한 코드를 사용했지만 지금은 Windows 시스템에서도 똑같은 코드가 필요합니다. Visual Studio 2008을 사용합니다.Vector가 올바른 데이터 유형 (uint16_t 대신 wchar_t)을 저장하지 않습니다.
Linux에서 데이터 읽기 나는 정수로 가득 찬 벡터를 얻습니다. 창에서 정수 및 다음 문자 또는 바이트 데이터를 가져옵니다. 나는 그것을 더 잘 묘사 할만큼 충분한 것을 모른다.
벡터는
std::vector< unsigned short int > data;
data.resize(samples * lines * bands);
std::fill(data.begin(), data.end(), 0);
에 의해 초기화하고 관련 코드는 machine_endian 부분은 실행되지 않습니다
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;
}
입니다. temp는 숫자를 int로 변환 할 수 있는지 테스트하는 것입니다. 그것은 잘 작동합니다. 그러나 temp를 벡터에 넣으면 int보다 더 많은 정보가 삽입되고 wchar_t로 나열됩니다. 아래 이미지를 참조하십시오. 나는 그것이 타입 크기와 관련이 있다고 생각하지만, 나는 왜 그런지 모릅니다. 그것은 내 것이거나 Visual Studios 결함입니까? 어떤 아이디어?
'wchar_t'는'unsigned short'로 정의되어 있습니다. (직접적으로 정의되지 않은 경우에는 2 바이트이고 같은 방식으로 동작합니다) 그래서 단지 typename 디스플레이 문제 일뿐입니다. 번호가 정확합니까 (유형에 관계없이)? –
답장을 보내 주셔서 감사합니다! Ok, 그것은 조금 지워진다. 유감스럽게도 지금 당장은 전화 번호를 확인할 수는 없지만 그 번호가 정확하지 않다고 믿을만한 이유가 없습니다 (합리적인 가치). 매우 중요하다면 값을 얻으려고 할 수는 있지만 일은별로 없습니다. 하지만 임시 변수에 어떻게 저장하고 벡터에서 동일한 데이터 유형으로 초기화 할 때 여분의 데이터를 얻을 수 있습니까? – SveinT
죄송합니다. 영어가 제 첫 번째 언어가 아니기 때문에 "임시 변수에 어떻게 저장하면됩니다. 그런 다음 동일한 데이터 유형으로 초기화 될 때 벡터에서 여분의 데이터를 얻을 수 있습니까?" 질문을 다시 말해 주시겠습니까? –