저는 C++ 응용 프로그램을 작성 중이며 메모리에 바이트 배열을 저장하는 C++의 일반적인 방법이 궁금합니다.C++ STL의 문자열 이진 데이터에 대한 eqivalent
특별히 바이너리 데이터를 제외하고는 문자열과 같은 것이 있습니까?
지금은 데이터를 저장하기 위해 * unsigned char ** 배열을 사용하고 있지만 더 많은 STL/C++를 사용하는 것이 더 좋을 것입니다.
저는 C++ 응용 프로그램을 작성 중이며 메모리에 바이트 배열을 저장하는 C++의 일반적인 방법이 궁금합니다.C++ STL의 문자열 이진 데이터에 대한 eqivalent
특별히 바이너리 데이터를 제외하고는 문자열과 같은 것이 있습니까?
지금은 데이터를 저장하기 위해 * unsigned char ** 배열을 사용하고 있지만 더 많은 STL/C++를 사용하는 것이 더 좋을 것입니다.
std::vector<unsigned char>
을 사용하고 싶습니다. 필요한 대부분의 작업은 반복기 범위가있는 STL을 사용하여 수행 할 수 있습니다. 또한 실제 데이터가 필요하다면 &v[0]
은 기본 배열에 대한 포인터를 제공한다는 보장이 있습니다.
v.data()가 더 명확 할 때'& v [0]'에 의존 할 필요가 없습니다. –
@LimitedAtonement 실제로 2009 년'data()'는'std :: vector'에 정의되지 않았습니다. –
이진 데이터의 경우에도 std::string
을 사용할 수 있습니다. std::string
의 데이터 길이는 명시 적으로 저장되며 Null 종료에 의해 결정되지 않으므로 Null 바이트는 std::string
에 특별한 의미가 없습니다.
std::string
은 이진 데이터로 작업하는 데 유용하지만 vector
으로는 제공되지 않는 많은 방법을 제공하기 때문에 종종 std::vector<char>
보다 편리합니다. 바이너리 데이터를 파싱/생성하려면 substr()
과 같은 것이 유용하며 +
및 std::stringstream
에 대한 과부하가 유용합니다. 벡터에서는 <algorithm>
의 알고리즘을 사용하여 동일한 효과를 얻을 수 있지만 문자열 메서드보다 더 어색합니다. "문자 시퀀스"에 대해서만 수행하면 std::string
은 "바이너리"데이터가 포함 된 경우에도 일반적으로 원하는 방법을 제공합니다.
std::vector<unsigned char>
또는 std::vector<uint8_t>
(현대 stdint.h
헤더가있는 경우)을 사용해야합니다. 고정 크기 버퍼로 작업하는 경우 unsigned char[]
또는 uint8_t[]
을 사용하면 아무런 문제가 없습니다. std::vector
이 정말 빛나는 곳은 자라나 버퍼를 자주 추가해야하는 경우입니다. STL 반복자는 포인터와 동일한 의미를 갖기 때문에 STL 알고리즘은 std::vector
및 일반 오래된 배열에서도 똑같이 작동합니다.
CAdaker에서 지적했듯이 &v[0]
이라는 표현식은 벡터의 버퍼에 대한 기본 포인터를 제공한다는 보장이 있습니다. 이는 하나의 인접한 메모리 블록임을 보장합니다. 이 보증은 C++ 표준의 부록에 추가되었습니다.
필자는 개인적으로 임의의 바이트 버퍼를 조작하는 데 개인적으로는 std::string
을 사용하지 않는 것이 좋습니다. 잠재적으로 혼란 스럽기 때문에 개인적으로는 사용하지 않을 것입니다.
중복 된 http://stackoverflow.com/questions/441203/proper-way-to-store-binary-data-with-c-stl –