Pregunta

es que hay una forma aceptada estándar de permutación de octeto UUID para su transmisión por una red (o el almacenamiento de archivos)? (Quiero enviar / guardar los 16 bytes primas en lugar de convertir el UUID de una representación de cadena.)

Al principio pensé que debería dividir el UUID en 4 enteros de 32 bits y llame htonl en cada uno de ellos, pero eso no huele bien. Un UUID tiene estructura interna (de 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;

¿Sería correcto hacer:

...
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 */
....

Antes de escribir, y luego el correpsonding ntoh ... llama después de leer en el otro extremo?

Gracias.

¿Fue útil?

Solución

Sí, eso es lo correcto a hacer.

Cada número (time_low, time_mid, time_hi_and_version) están sujetos a la orden de los bytes. el campo node no lo es. clock_seq_hi_and_reserved y clock_seq_low también son objeto de orden de bytes, pero son cada uno un byte, por lo que no importa.

Por supuesto, depende de usted para asegurarse de que usted elija el orden correcto en ambos extremos, o no entiende lo que es el orden en el otro extremo si no se controlan. Microsoft, por supuesto, utiliza poca endian por sus UUID. Puede ver la definición de un UUID de Microsoft aquí .

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top