WideChar转Bytes?

6

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

2个回答

12

David 给出了首选的方法,即,

var
  b1, b2: Byte;
  wc: WideChar;

...

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

还有几个其他选项(只是为了好玩):

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

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

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

var
  wc: WideChar;
  bytes: WordRec absolute wc;

begin

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

2
我更喜欢将char转换为“Lo”和“Hi”函数参数的本机数据类型,因此我会使用“Lo(Integer(wc));”以及相同的方法用于“Hi”。在我看来,“absolute”指令* magic *是最简单的,但由于这个问题要求字节而不是“WordRec”,所以我会使用“bytes:array [0..1] of Byte absolute wc;”。[+1ed] - TLama
@Andreas 哦,看来我应该列出所有不同的方式! - David Heffernan
@David:至少我尝试不去窃取你的绿色勾号(我的第一段)... - Andreas Rejbrand
@David:我有些犹豫,但我还是加入了WordRec转换。但我仍然明确表示你是第一个提出这个解决方案的人。 - Andreas Rejbrand
@AndreasRejbrand 我想强调的是,我对接受答案没有任何问题。你比我付出了更多的努力。为什么你不应该得到奖励呢? - David Heffernan
显示剩余6条评论

8
有很多方法可以做到这一点。例如,我的个人选择是:
var
  b1, b2: Byte;
  wc: WideChar;

....

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

1
我不会列举所有其他的方法。很好奇有多少真正独特的版本存在。 - David Heffernan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接