2012-09-12 3 views
2

난 임의의 이진 데이터의 블록을 나타내는 void *을 사용하는 ZeroMQ 라이브러리와 함께 일하고 있어요. 그러나 std::vector을 사용하여이 블록을 복사하고 이동할 수 있습니다. 원시 바이트를 나타내는 std::vector을 만드는 데 선호되는, 관용적 인 방법은 무엇입니까? 현재 std::vector<unsigned char>을 사용하고 있지만 다른 사람들이 내 코드를 이해하고 있는지 확인하고 싶습니다.std :: vector에서 raw 바이트를 표현하는 가장 좋은 방법은 무엇입니까?

+0

'서명되지 않은 문자'는 정상입니다. 옥텟 부분을 강조하고 싶다면'uint8_t'를 사용할 수도 있습니다. –

+0

나는'typedef uint8_t byte;'를 만들거나 어쩌면 아무것도 할 수없는 클래스를 만들 수도있다. (byte togeather를 추가하지 않음) –

+0

ZeroMQ 자체가 "as a char"또는 "unsigned char"데이터를 읽는지 여부를 지정합니다. 그렇지 않다면 unsigned char는 괜찮을 것이다. 'char'를 지정하면 라이브러리가 기대하는 것을 제공한다는 것을 강조하기 위해 그것을 사용하고자 할 수 있습니다. 어쨌든 차이가 없어야합니다. –

답변

8

어느

std::vector<unsigned char> 

또는
#include <cstdint> 

std::vector<std::uint8_t> 

모두

나에게 잘 보인다.

+2

8 비트 바이트가없는 시스템에는'uint8_t'가 존재하지 않습니다. 'uint_least8_t'가 더 나은 선택 일지 모르지만'unsigned char'가 최선의 선택입니다. –

+0

이 솔루션은 원시 데이터를 저장하는 데 널리 사용되는 것으로 보입니다. 저에게 왜 "int8_t"가 아닌 "uint8_t"를 사용해야하는지 명확하지 않습니다 - 아무도 이점을 알고 있습니까? Java는 데이터 유형에만 서명 했으므로 C++에서 unsigned int를 사용하는 이유는 무엇입니까? –

0

데이터의 성격을 모르는 경우 unsigned char은 지저분 해지지 않고 표현할 수있는 가장 작은 비트입니다. 따라서 임의의 종류의 임의의 메모리 블록에 대한 일반적인 유형입니다.

그래서 벡터는 완벽하게 멋지게 보입니다.

관련 문제