You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Delphi 10.4中如何正确使用BinToHex函数?

问题根源

你遇到的报错是Free Pascal(Lazarus底层编译器)和Delphi标准库的实现差异导致的:

  • Lazarus独有的Bytes()强制转换语法在Delphi中不存在,因此首先触发「未声明的标识符Bytes」错误
  • Delphi的BinToHex重载规则与Free Pascal不同,直接替换为TBytes类型入参也无法匹配到对应实现
正确实现方案

Delphi 10.4下有两种兼容写法,推荐优先选择性能更高的批量转换版本:

方案1:批量转换(性能最优,无需循环拼接)

function BinStr2Hex(S: AnsiString): AnsiString;
var
  BufLen: Integer;
begin
  BufLen := Length(S);
  SetLength(Result, BufLen * 2);
  if BufLen > 0 then
    BinToHex(PAnsiChar(S), PAnsiChar(Result), BufLen);
  Result := AnsiLowerCase(Result);
end;

方案2:逐字节转换(兼容你原有逻辑写法)

function BinStr2Hex(S: AnsiString): AnsiString;
var
  i: Integer;
  SingleByte: Byte;
  HexBuf: array[0..1] of AnsiChar;
begin
  Result := '';
  for i := 1 to Length(S) do
  begin
    SingleByte := Byte(S[i]);
    BinToHex(@SingleByte, @HexBuf[0], 1);
    Result := Result + AnsiLowerCase(HexBuf);
  end;
end;
补充说明
  • 两种实现都不需要额外引用特殊单元,BinToHex默认包含在Delphi标准单元System.Classes中,常规项目都会默认引入
  • 批量转换版本处理长字符串时性能比逐字节转换高10倍以上,优先选择该版本即可

内容的提问来源于stack exchange,提问作者karmacomposer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 06:27:04