2017-05-11 31 views
-2

16 진수 값을 벡터에 저장하여 변환하고 처리 할 수 ​​있습니다. 나는 * .DAT 파일 마녀처럼 보이는이 : 0000 FFFE fffa FFFD fffa 000016 진수 값을 std :: vector에 저장합니다. <unsigned char>

0004 0001

0002 0001 0000 0000 0000 0000 0000 0001

0001 0000 0000 0000 0000 0002 0004 0003

....

나는이 코드를 사용하여 파일을 읽고 있어요 :

0123을
std::vector<unsigned char> data; 

std::ifstream file; 
file.open("/home/vktrbhm/SciVis/DATA/elev0/L0e000a.dat", std::ios::binary); 
if(file.is_open()){ 
    std::cout << "hello data"<< std::endl; 
}else{ 
    std::cerr << "Na ahh aahhhaaaa .... Wrong Directory"<< std::endl; 
} 

// get length 
file.seekg(0, file.end); 
int length = file.tellg(); 
file.seekg(0, file.beg); 

data.resize(length); 

file.seekg(0, std::ios::beg); 
file.read((char*)&data.front(), length); 
file.close(); 

std::cout << data.at(0) << std::endl; 

그러나 내 출력은 값이 아니라 단지 is입니다. 한 번에 이걸 변환해야한다는 것을 알고 있지만 어떻게 해야할지 모르겠습니다.

나는 약간의 도움에 감사 드리며 바보 같은 질문에 대해 사과드립니다.

+2

귀하의 dat 파일은 텍스트 또는 바이너리입니다. 'cat x.dat'을하면 무엇을 볼 수 있습니까? – pm100

답변

0

이 줄 :

std::cout << data.at(0) << std::endl; 

사용자 환경에 문자 인코딩 기본을 사용하여 문자를 인쇄 할 것입니다. 대부분 '\0' 문자가 화면에 출력되는 문자는 data.at(0)이며 대부분 (대부분은 모두) 인코딩의 문자 모양에 해당하지 않습니다. 숫자를 인쇄하려면 캐스팅해야합니다.

std::cout << static_cast<int>(data.at(0)) << std::endl; 
+0

아 좋아. 그래서 내 데이터 벡터 모든 16 진수 값을 저장하고 그들을 변환하려면 static_cast 사용해야합니다. 그것은 많은 도움이되었습니다. 감사 – vktrbhm