은 다음 내 경우처럼 : C++ 표준 : 이제 stringstream 운영 최적화
- 내가 (숯불 *)
- 내 목표는 같은 바이너리 나는 표준 : : fstream과에서 읽고 있어요 파일을 읽을 수술을 파일, 진수 형식에서 모든 바이트를 가지고, 다음 변수 문자열에 추가하기
- 의 말을하자, 예를 들어 2
항목에 따라 형식 파일의 전체 내용을 유지해야하는 문자열 변수 나는 다음 빈을 가지고있다. 예상대로 접근 위
stringstream fin;;
for (size_t i = 0; i < fileb_size; ++i)
{
fin << hex << setfill('0') << setw(2) << static_cast<uint16_t>(fileb[i]);
}
// this would yield the output "D0469857A0249956A3"
return fin.str();
은, 그러나,이 작품 : 진 파일 내용을 다음과 같이
D0 46 98 57 A0 24 99 56 A3
나는 각 바이트를 포맷하고있어 방법은 내가 이해하는 대용량 파일은 매우 느리다. stringstream은 입력 포맷을위한 것입니다!
제 질문은 그러한 코드를 최적화하는 방법이나 함께 사용하는 방법이 있습니까? 필자의 유일한 제약은 출력이 위와 같이 문자열 형식이어야한다는 것입니다.
감사합니다.
iostream은 효율성을 높이기 위해 설계되지 않았습니다. 특정 사용 사례의 경우 구현 고유 파일 I/O를 능가 할 수 없습니다. 아니면, 더 나쁜 경우에는 C의'FILE *'을 가져 와서 직접 최적화 된 16 진수 변환 코드를 굴려 라. 효율성을 위해 이길 수는 없었습니다. 로켓 과학이 아닙니다. 적어도 C와 C++를 배웠던 날에 이것은 전형적인 숙제 과제였습니다 : 16 진법을 읽고 그것을 변환하십시오. –
"매우 느립니다"무엇에 비해? –
출력 문자열에 대해 [예약 크기] (https://stackoverflow.com/q/1941064/995714)를 시도 했습니까? 출력의 크기를 계산하기 쉽고 배열을 여러 번 재 할당하는 것을 피하기 위해 입력 크기를 이미 알고 있습니다. –