네트워크를 통해 UUID 및 바이트 스왑
-
19-09-2019 - |
문제
네트워크 (또는 파일 스토리지)를 통해 전송하기 위해 바이트 스왑 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의 정의를 볼 수 있습니다 여기.
제휴하지 않습니다 StackOverflow