External Data Representation (kurz: XDR) ist ein abstrakter technischer Kommunikationsstandard, der von Sun Microsystems und anderen Unternehmen definiert wurde, um den Datenaustausch zwischen Servern und Clients hardwareunabhängig zu standardisieren. XDR ist eine Implementierung der Darstellungsschicht des OSI-Modell zur Netzwerkkommunikation und ist im RFC 1014[1] verbindlich festgeschrieben. Er wurde 1995 aktualisiert durch den RFC 1832,[2] welcher 128-bit-Gleitkommazahlen hinzufügte, und 2006 durch den RFC 4506,[3] welcher nur strukturelle, aber keine inhaltlichen Änderungen beinhaltet.
Seine Hauptanwendung findet dieser Standard in der Kommunikation im SUN Network File System. Eine Reihe von Programmiersprachen unterstützen das Lesen und Schreiben von XDR-Daten durch Bibliotheksfunktionen (siehe z. B. xdr_*-Funktionen in der libc unter Unix für C, XDR-Modul für Perl, xdrlib-Modul für Python).
XDR definiert eine Repräsentation für die gebräuchlichsten Datentypen wie z. B. Integer, Strings oder Arrays, ist jedoch selbst untypisiert. Die XDR-Byte-Reihenfolge wird in den aktuellen Standards auf Big Endian festgelegt, was der Network Byte Order von TCP/IP entspricht. Einer XDR-Einheit entsprechen 4 Bytes. Gleitkommazahlen werden in einfacher und doppelter Genauigkeit nach dem Standard IEEE 754 kodiert.
Datentypen
Basisdatentypen
Name
Repräsentation
Erläuterungen
integer
32 bit Zweierkomplement
unsigned integer
32-Bit-Ganzzahl
hyper
64 bit Zweierkomplement
unsigned hyper
64-Bit-Ganzzahl
enumeration
32 Bit Ganzzahl
bool
32 Bit Ganzzahl
0=false, 1=true
float
32 Bit IEEE Gleitkommazahl
double
64 Bit IEEE Gleitkommazahl
quadruple
128 Bit IEEE Gleitkommazahl
opaque[n]
Binärdaten der Länge n Oktette
ggf. mit Padding, falls Länge kein Vielfaches von 4 Byte
opaque<n>
32-bit Längenfeld, gefolgt von Binärdaten mit angegebener Länge
ggf. mit Padding, falls Länge kein Vielfaches von 4 Byte
string<n>
32 Bit Längenfeld, gefolgt von einem ASCII-String
ggf. mit Padding, falls Länge kein Vielfaches von 4 Byte. Wenn die Längenangabe weggelassen wird, gilt eine Maximallänge von 232−1
void
–
Leerer Datentyp, der keinen Speicherplatz beansprucht
Zusammengesetzte Datentypen
Name
Syntax
Repräsentation
Erläuterungen
fixed-length array
datatypeidentifier[n]
n Elemente von datatype hintereinander
variable-length array
datatypeidentifier<n>
32-Bit Längenfeld, gefolgt von max. n Elementen
Wenn n fehlt, gilt n=232-1
structure
struct{ type1 identifier1; … }
Die Komponenten der Datenstruktur in der Reihenfolge ihrer Deklaration
discriminated union
Sonstige Datentypen
Name
Syntax
Repräsentation
Erläuterungen
optional-data
datatype*identifier
Wird gespeichert wie eine discriminated union mit einem boolean, gefolgt von dem Datenfeld, falls der Boole’sche Wert true ist.