WideChar到字节?

Lit*_*per 6 delphi byte bytearray widechar

我这里有一个简单的问题.如何在Delphi - 7中转换WideChar为2x Byte?我搜索了互联网和StackOverflow,但没有结果......

And*_*and 12

大卫给了你更好的方法,即

var
  b1, b2: Byte;
  wc: WideChar;

...

b1 := WordRec(wc).Lo;
b2 := WordRec(wc).Hi;
Run Code Online (Sandbox Code Playgroud)

一些其他选项(只是为了好玩):

b1 := Lo(Word(wc));
b2 := Hi(Word(wc));
Run Code Online (Sandbox Code Playgroud)

b1 := Byte(wc);
b2 := Byte(Word(wc) shr 8);
Run Code Online (Sandbox Code Playgroud)

b1 := PByte(@wc)^;
b2 := PByte(NativeUInt(@wc) + 1)^;
Run Code Online (Sandbox Code Playgroud)

var
  wc: WideChar;
  bytes: WordRec absolute wc;

begin

  // Magic! The bytes are already found in bytes.Lo and bytes.Hi!
Run Code Online (Sandbox Code Playgroud)

  • 我更倾向于将char转换为`Lo`和`Hi`函数参数的本机数据类型,因此我将使用`Lo(Integer(wc));`和`Hi`相同.绝对指令*magic*在我看来是最简单的,但是我会使用`bytes:array [0..1] of Byte absolute wc;`这个问题要求字节,而不是`WordRec`.[+ 1ED] (2认同)

Dav*_*nan 7

有很多方法可以做到这一点.例如,我个人的选择是:

var
  b1, b2: Byte;
  wc: WideChar;

....

b1 := WordRec(wc).Lo;
b2 := WordRec(wc).Hi;
Run Code Online (Sandbox Code Playgroud)