영혼과 매우 비슷한 질문이 있습니다. here. 불행히도 그 질문은 많은 반응을 촉발하지 못했습니다. 나는 대체적인 방법이 제안 될 수 있기를 희망하면서 좀 더 구체적인 질문을 할 것이라고 생각했습니다.작은 컨테이너로 반복하는 방법 (즉, 스트라이드! = 1)
std::cin
(tar --to-command=./myprog
)에 이진 파일을 쓰고 있습니다. 바이너리 파일은 실수로 플로트 집합이므로 데이터를 std::vector<float>
(이상적으로는 C++ 방식)에 넣으려고합니다.
내가 생성 할 수 있습니다 내가 지금 std::transform
과 float
로 변환 (A char[2]
을 수행하는 기능을 아마도하는 std::vector<float>
에 내 std::vector<char>
변환 할 std::vector<char>
아주 멋지게
#include <fstream>
#include <iostream>
#include <iterator>
#include <algorithm>
#include <vector>
int
main (int ac, char **av)
{
std::istream& input = std::cin;
std::vector<char> buffer;
std::copy(
std::istreambuf_iterator<char>(input),
std::istreambuf_iterator<char>(),
std::back_inserter(buffer)); // copies all data into buffer
}
(감사
this answer까지) , 말하십시오). 그러나 내
std::vector<float>
은
std::vector<char>
의 절반만큼의 요소를 갖기 때문에 고군분투하고 있습니다. 2의 보폭로 반복 할 수 있다면 나는 괜찮을 것이라고 생각하지만, 이전 질문에서 나는 그렇게 할 수 없다고 (적어도 우아하게는) 할 수없는 것처럼 보인다.
왜'char'에서 읽습니까? 왜'std :: string'이 아닌가? 당신이 무엇을 입력하고 싶은지, 그리고 무엇을하고 싶은지 불분명합니다. – GManNickG
@Gman, std :: vector 바이너리 파일을 cin으로 입력하여 끝내고 싶습니다. 라이브러리 함수를 사용하여 std :: vector를 디코딩 할 수 있습니다. 찌르는 소리를 통해 진행하는 것이 더 쉽다면 멋지다. (나에게 cin으로 그걸하는 법은 분명하지 않다.) –
Tom
@Tom : 이진 파일의 형식은 무엇입니까? – GManNickG