WideChar 到字节?
Posted
技术标签:
【中文标题】WideChar 到字节?【英文标题】:WideChar to Bytes? 【发布时间】:2013-03-01 13:22:21 【问题描述】:我在这里有一个简单的问题。如何在 Delphi - 7 中将WideChar
转换为 2xByte
?我搜索了互联网和***,但没有结果...
【问题讨论】:
【参考方案1】: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!
【讨论】:
我更愿意将 char 转换为Lo
和 Hi
函数参数的本机数据类型,因此我将使用 Lo(Integer(wc));
和 Hi
。绝对指令 magic 在我看来是最简单的,但我会使用bytes: array[0..1] of Byte absolute wc;
,因为这个问题要求字节,而不是WordRec
。 [+1ed]
@TLama 你认为 WordRec 的字段是什么类型的?另外,Lo和Hi有点奇怪。它们接受 32 位整数,但忽略最高有效的 16 位。它们是 16 位的遗留问题。
@David,我知道WordRec
的字段是字节,但在我看来它的可读性较差!
@TLama 好的,我明白你的意思了。 Hi 和 Lo 成员的优势在于您知道他们在哪个方向。不过,我真的不喜欢那些固有的 Lo 和 Hi 16 位功能。言语太奇怪了。由于隐式类型转换,也容易出错。只是我的看法。
@Andreas 好吧。看起来我应该列出所有不同的方式!【参考方案2】:
有很多方法可以做到这一点。例如,我个人的选择是:
var
b1, b2: Byte;
wc: WideChar;
....
b1 := WordRec(wc).Lo;
b2 := WordRec(wc).Hi;
【讨论】:
我不会列举所有其他方法。很想知道有多少真正不同的版本。以上是关于WideChar 到字节?的主要内容,如果未能解决你的问题,请参考以下文章
delphi ansichar 就是Delphi2010 他的edit编辑框文本是widechar类型也就是 1个字符占2个字节,不管是数字