程序问答   发布时间:2022-06-02  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了在 Delphi 中将宽字符代码点的十六进制字符串表示形式转换为宽字符大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决在 Delphi 中将宽字符代码点的十六进制字符串表示形式转换为宽字符?

开发过程中遇到在 Delphi 中将宽字符代码点的十六进制字符串表示形式转换为宽字符的问题如何解决?下面主要结合日常开发的经验,给出你关于在 Delphi 中将宽字符代码点的十六进制字符串表示形式转换为宽字符的解决方法建议,希望对你解决在 Delphi 中将宽字符代码点的十六进制字符串表示形式转换为宽字符有所启发或帮助;

我在将编辑框中的文本转换为 WIDeChar 时遇到问题。这被用于打印表情符号字符的代码中。

如果我手动设置如下所示的 WIDeChar 值

EmojI[1] := WIDeChar($D83D);
EmojI[2] := WIDeChar($DC4D);

但我希望能够通过如下编辑框设置十六进制代码

StringToWIDeChar(edit1.text,@wc1,Length(edit1.text));
StringToWIDeChar(edit2.text,@wc2,Length(edit2.text));
EmojI[1] := wc1;
EmojI[2] := wc2;

wc1 和 wc2 被定义为 WIDeChar。编辑框包含与上面硬编码相同的值。该代码导致输出空白,因此转换有问题。

我做错了什么?感谢您的帮助。

解决方法

您不能将字符'$D83D' 解释为文本 -- 相反,您必须将其解析为整数。

首先,您需要从编辑框中获取文本。这是Edit1.Text。然后您需要将其转换为整数。例如,您可以使用 StrToIntTryStrToInt。然后您只需要将这个整数重新解释(转换)为 Char:

procedure TForm1.Edit1Change(Sender: TObject);
var
  CodeUnit: Integer;
begin
  if TryStrToInt(Edit1.Text,CodeUnit) and InRange(CodeUnit,$FFFF) then
    Label1.Caption := Char(CodeUnit)
  else
    Label1.Caption := '';
end;

在这里,作为奖励,我还使用 InRange 验证假定的 codeunit 是实际的 16 位无符号整数(我的意思是,用户理论上可以键入 123456789)。 Delphi 的 StrToInt 函数支持使用美元符号表示法的十六进制。

大佬总结

以上是大佬教程为你收集整理的在 Delphi 中将宽字符代码点的十六进制字符串表示形式转换为宽字符全部内容,希望文章能够帮你解决在 Delphi 中将宽字符代码点的十六进制字符串表示形式转换为宽字符所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。