2012-05-21 2 views
1

linux에서 C++를 사용하여 UUID를 128 비트 정수로 변환 할 수 있습니까? UUID를 정수로 변환하면 16 바이트 정수를 바이트 배열로 변환해야 TCP를 통해 다른 서버로 보낼 수 있습니다.정수로 저장된 C++ UUID

필자가 아는 한 (잘못했다면 올바른 것), C++의 16 바이트 정수 처리에 대한 지원이 제공되지 않습니다. 어떻게 할 수 있습니까? 저장 및 정수로 보낼 수 없다면 문자열로 uuid 보내는 것에 대해 생각하고 있습니다. C에서 16 개 바이트 정수를 구현하기위한

+2

['boost.uuid'] (http://www.boost.org/doc/libs/1_49_0/libs/uuid/)를 사용하지 않는 이유는 무엇입니까? – KillianDS

+0

1) 원래 UUID는 어떤 형식으로 보관하고 있습니까? 2) 128 비트 정수에서 수행 할 작업은 무엇입니까? –

+0

나는 그것을 문자열로 잡고 있지만, 나는 기본적으로 unsigned char [16] 인 uuid_t로부터 문자열을 생성한다는 것을 깨달았습니다. 그래서 그것을 변환하기 위해 아무 것도 할 필요가 없다고 생각합니다. 16 바이트가 될지 궁금합니다. NET의 GUID와 호환. –

답변

4

왜 당신은 128 비트 정수로 표현 하시겠습니까?

UUID는 어떻게 표현됩니까? 아마도 그것은 문자열이거나 이미 16 바이트 유형입니다. 문자열이라면 직접 16 바이트 배열 표현을 계산할 수 있으며 이미 16 바이트 길이의 유형이라면 16 바이트 배열로 직접 볼 수 있습니다.

언제나처럼 모든 관계자가 네트워크 표현을위한 바이트 순서에 동의해야합니다.


C++ 구현에는 128 비트 정수 유형이 필요하지 않지만 내장 유형 중 하나는 128 비트 일 수 있습니다. long long. 또는 구현시 사용할 수있는 확장 된 정수 유형을 제공 할 수 있습니다.

Clang과 저는 GCC가 모두 __uint128_t 유형을 지원하지만 불행히도이 유형의 확장 된 정수에 대해서는 C++ 요구 사항을 따르지 않는다고 생각합니다. 그러나 128 비트 산술 연산이 필요합니다. 따라서 UUID를이 유형에 집어 넣은 다음 16 바이트 배열로 보려면 정상적인 작업을 수행 할 수 있어야합니다.

+0

고마워, 내가 필요로하는 것을 발견했다. uuid.h는 uuid_t 타입의 uuid_t를 생성 할 수있다. 이것은 크기가 [16] 인 unsigned char 배열이다. 나는 그것을 무엇이든 변환 할 필요가 없다. 16 바이트가 .Net의 GUID 유형과 호환되는지 궁금합니다. –