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
相关产品推荐
相关产品推荐

