문제

네트워크 (또는 파일 스토리지)를 통해 전송하기 위해 바이트 스왑 UUID에 대한 표준 허용 방법이 있습니까? (UUID를 문자열 표현으로 변환하는 대신 16 개의 원시 바이트를 보내거나 저장하고 싶습니다.)

처음에는 UUID를 4 32 비트 정수로 분할하고 각각 HTONL을 호출해야한다고 생각했지만 냄새가 나지 않았습니다. UUID에는 내부 구조가 있습니다 (RFC 4122).

typedef struct {
    unsigned32  time_low;
    unsigned16  time_mid;
    unsigned16  time_hi_and_version;
    unsigned8   clock_seq_hi_and_reserved;
    unsigned8   clock_seq_low;
    byte        node[6];
} uuid_t;

맞는 것이 옳을까요?

...
uuid.time_low = htonl( uuid.time_low );
uuid.time_mid = htons( uuid.time_mid );
uuid.time_hi_and_version = htons( uuid.time_high_and_version );
/* other fields are represented as bytes and shouldn't be swapped */
....

글을 쓰기 전에, 그리고 코레 프슨 NTOH ... 다른 쪽 끝에서 읽은 후 전화를 걸겠습니까?

감사.

도움이 되었습니까?

해결책

예, 그것은 올바른 일입니다.

각 번호 (time_low, time_mid, time_hi_and_version)는 바이트 주문에 적용됩니다. 그만큼 node 필드는 아닙니다. clock_seq_hi_and_reserved 그리고 clock_seq_low 바이트 주문의 대상이지만 각각 하나의 바이트이므로 중요하지 않습니다.

물론, 양쪽 끝에서 올바른 순서를 선택하거나 통제하지 않으면 주문이 무엇인지 이해하는 것은 귀하에게 달려 있습니다. Microsoft는 물론 UUID에 Little Endian을 사용합니다. UUID에 대한 Microsoft의 정의를 볼 수 있습니다 여기.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top