如何将字号传递给字符串?

时间:2018-07-07 00:54:10

标签: delphi numbers widestring

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

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

2 个答案:

答案 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的函数。我把那个练习留给你。

同样,您无法投射。您将必须进行显式转换。两种方式。