首先,我很抱歉无法更好地描述我的问题。
我所拥有的是字号65025,即0xFE01或 11111110 00000001二进制。我想将值传递给wstr Word => 11111110 00000001。
我发现使用类型转换不起作用。
这里还有一个问题。如果我想添加另一个数字,例如10000 => 0x03E8,该怎么做。因此,在结果中,宽字符串应引用值0xFE01 0x03E8。
然后,如何从宽字符串到单词反回检索相同的数字?
var wstr: Widestring;
wo: Word;
begin
wo := 65025;
wstr := Widestring(wo);
wo := 10000;
wstr := wstr + Widestring(wo);
end
编辑:
我正在给出我想要的另一个更简单的示例...如果我的字值49(等于ASCII值1),则我希望wstr为“ 1”,以二进制形式表示b00110001。我想将单词编号中的位复制到字符串中。
答案 0 :(得分:3)
您似乎想将一个单词解释为UTF-16代码单元。在Unicode Delphi中,您将使用Chr()
函数。但是我怀疑您使用的是ANSI Delphi。在这种情况下,将WideChar
强制转换为WideChar(wo)
。
答案 1 :(得分:0)
您正在将Word
投射到WideString
。在Delphi中,转换通常不会转换,因此您只是将值65025
重新解释为指针(WideString
是指针)。但是65025
不是有效的指针值。
您必须将Word
明确地转换为WideString
,例如具有这样的功能(未经测试,但应该可以工作):
function WordToBinary(W: Word): WideString;
var
I: Integer;
begin
Result := '0000000000000000';
for I := 0 to 15 do // process bits 0..15
begin
if Odd(W) then
Result[16 - I] := '1';
W := W shr 1;
end;
end;
现在您可以执行以下操作:
wo := 65025;
wstr := WordToBinary(wo);
wo := 10000;
wstr := wstr + ' ' + WordToBinary(wo);
反之,您将必须编写将转换从WideString转换为Word的函数。我把那个练习留给你。
同样,您无法投射。您将必须进行显式转换。两种方式。