首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Delphi中将widechar代码点的十六进制字符串表示形式转换为widechar

在Delphi中将widechar代码点的十六进制字符串表示形式转换为widechar
EN

Stack Overflow用户
提问于 2021-04-28 05:52:46
回答 1查看 106关注 0票数 2

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

如果我像下面这样手动设置WideChar值,它就能正常工作

代码语言:javascript
复制
Emoji[1] := WideChar($D83D);
Emoji[2] := WideChar($DC4D);

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

代码语言:javascript
复制
StringToWideChar(edit1.text, @wc1, Length(edit1.text));
StringToWideChar(edit2.text, @wc2, Length(edit2.text));
Emoji[1] := wc1;
Emoji[2] := wc2;

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

我做错了什么?感谢你在这里的帮助。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-04-28 05:58:14

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

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

代码语言:javascript
复制
procedure TForm1.Edit1Change(Sender: TObject);
var
  CodeUnit: Integer;
begin
  if TryStrToInt(Edit1.Text, CodeUnit) and InRange(CodeUnit, 0, $FFFF) then
    Label1.Caption := Char(CodeUnit)
  else
    Label1.Caption := '';
end;

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

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67291163

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档