1

首先,我很抱歉我不能更好地描述我的问题。

我所拥有的是字号 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。我想将位从字号复制到字符串。

4

2 回答 2

3

看起来您想将一个单词解释为 UTF-16 代码单元。在 Unicode Delphi 中,您将使用该Chr()函数。但我怀疑你使用的是 ANSI Delphi。在这种情况下,转换为WideCharwith WideChar(wo)

于 2018-07-07T08:27:58.787 回答
0

您正在将 aWord转换为WideString. 在 Delphi 中,强制转换通常不会转换,因此您只需将值重新解释65025为指针(aWideString是指针)。但65025不是有效的指针值。

您将必须明确地将 转换Worda 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 的函数。我会把这个练习留给你。

同样,你不能施放。您将必须显式转换。双向。

于 2018-07-07T01:40:21.597 回答