2013-03-13 6 views

Antwort

12

David gibt Ihnen die bevorzugte Art und Weise, nämlich

var 
    b1, b2: Byte; 
    wc: WideChar; 

... 

b1 := WordRec(wc).Lo; 
b2 := WordRec(wc).Hi; 

Ein paar andere Optionen (nur zum Spaß):

b1 := Lo(Word(wc)); 
b2 := Hi(Word(wc)); 

und

b1 := Byte(wc); 
b2 := Byte(Word(wc) shr 8); 

a nd

b1 := PByte(@wc)^; 
b2 := PByte(NativeUInt(@wc) + 1)^; 

und

var 
    wc: WideChar; 
    bytes: WordRec absolute wc; 

begin 

    // Magic! The bytes are already found in bytes.Lo and bytes.Hi! 
+3

+1, wir sind jetzt bis zu 5 verschiedene Möglichkeiten ..... –

+2

Ich würde es vorziehen, char an den nativen Datentyp der 'Lo' und' Hi' Funktionsparameter zu übergeben, also würde ich 'Lo (Integer (wc)); 'und das gleiche für' Hallo'. Die absolute Direktive * magic * ist meiner Meinung nach die einfachste, aber ich würde 'bytes: array [0..1] von Byte absolute wc;' verwenden, da diese Frage nach Bytes fragt, nicht nach dem 'WordRec'. [+ 1ed] – TLama

+0

@TLama Welchen Typ sind die Felder von WordRec? Auch Lo und Hi sind ein bisschen komisch. Sie akzeptieren 32-Bit-Ganzzahlen, ignorieren aber die höchstwertigen 16 Bits. Sie sind ein Hang over 16 Bit. –

7

Viele Möglichkeiten, dies zu tun. Zum Beispiel würde meine persönliche Wahl sein:

var 
    b1, b2: Byte; 
    wc: WideChar; 

.... 

b1 := WordRec(wc).Lo; 
b2 := WordRec(wc).Hi; 
+1

Ich werde nicht alle anderen Möglichkeiten aufzuzählen, es zu tun. Wäre gespannt, wie viele wirklich unterschiedliche Versionen es gibt. –