Ordine dei byte

L'endianness è un attributo dei dati che descrive l'ordine dei byte. Quando le applicazioni scambiano dati, devono conoscere la convenzione di ordinamento per i dati multi-byte. Altrimenti, i dati possono essere interpretati in modo errato.

I dati possono avere i seguenti formati di ordine dei byte:

Big endian
Un formato in cui il byte più significativo viene memorizzato per primo. Gli altri byte seguono in ordine decrescente di significato. Ad esempio, per una parola di quattro byte, l'ordine dei byte è 0, 1, 2, 3. Per una parola a due byte, è 0, 1.

Il formato Big Endian è utilizzato da pSeries, IBM® zSystems™, iSeries, Sun e HP.

Little endian
Un formato in cui il byte meno significativo viene memorizzato per primo. Gli altri byte seguono in ordine crescente di significato. Ad esempio, per una parola di quattro byte, l'ordine dei byte è 3, 2, 1, 0. Per una parola a due byte, è 1, 0.

Il formato Little Endian è utilizzato dalle macchine basate su Intel, tra cui l' xSeries.

L'endianness riguarda solo i dati multi-byte. All'interno di un singolo byte, i bit sono sempre ordinati nello stesso modo. L'ordine dei bit all'interno di un byte è sempre 7, 6, 5, 4, 3, 2, 1, 0.

UTF-8 i dati non sono influenzati dall'endianness, anche se i dati sono memorizzati come più di 1 byte. UTF-16 i dati e i dati dell' UTF-32 e sono influenzati dall'endianness. Ad esempio, il carattere "A" è codificato per UTF-16 e UTF-32 come mostrato nella tabella seguente:
Tabella 1. Esempio di codifica per il carattere 'A'
  UTF-16 UTF-321
Big endian X'0041' X'00000041'
Little endian X'4100' X'41000000'
Nota:
  1. Db2 for z/OS® non memorizza i dati in UTF-32

L'endianness diventa un potenziale problema quando i dati vengono scambiati tra sistemi e applicazioni che utilizzano formati endian diversi e i dati non vengono convertiti correttamente. Fai attenzione al formato endian dei dati gestiti dal tuo sistema o applicazione. Potresti notare problemi di endianness quando guardi i valori di codifica dei caratteri nelle tracce. Un problema del genere potrebbe verificarsi se si nota che i valori dei byte numerici sono stati scambiati. Ad esempio, ci si aspetta X'0041' ma si vede X'4100 '.

Esempio

Supponiamo che stiate caricando dati in un formati little endian (CCSID 1202) dall UTF-16 e da un'applicazione.NET. Db2 for z/OS non supporta la memorizzazione dei dati in CCSID 1202. Db2 , tuttavia, supporta le conversioni da e verso CCSID 1202. Db2 , quindi, converte i dati e li memorizza in un formato big endian (CCSID 1200) UTF-16. In questo caso, è necessario essere consapevoli che il formato dei dati è cambiato.