Delphi中编写十六进制字面量的正确方法是什么?是否有类似Python的字符串十六进制字面量语法?
Delphi 十六进制字符串字面量实现方案
Delphi 原生没有和 Python \x 前缀完全一致的内嵌在字符串双引号内的十六进制转义语法,但可以通过以下原生语法实现完全等效的效果:
- 常量场景直接拼接字符转义序列
Delphi 支持#$前缀的单字符十六进制转义写法,多个相邻的字符串常量、转义字符常量会被编译器自动拼接,不需要额外运算符。你给出的示例ab\xa1\x31_\x44\xf1\x10可以直接定义为常量:
const TARGET_STR = 'ab'#$A1'1_'#$44#$F1#$10;
该写法不需要运行时计算,编译期就会生成目标字符串,和Python字面量的效果完全一致。
- 变量场景动态拼接
如果需要在运行时生成字符串,可以结合Chr函数(对应Unicode字符)或AnsiChar函数(对应单字节字符)转换十六进制值:
var TargetStr: string; begin // Unicode字符串版本 TargetStr := 'ab' + Chr($A1) + '1' + '_' + Chr($44) + Chr($F1) + Chr($10); // 如果需要单字节Ansi字符串,改用下面的写法 // TargetStr := 'ab' + AnsiChar($A1) + '1' + '_' + AnsiChar($44) + AnsiChar($F1) + AnsiChar($10); end;
- 长序列场景用数组初始化
如果需要初始化的十六进制字符数量很多,可以通过字符数组批量定义再转字符串,可读性更高:
const TARGET_BUF: array[0..7] of AnsiChar = ( 'a', 'b', #$A1, #$31, '_', #$44, #$F1, #$10 ); var TargetStr: AnsiString; begin TargetStr := TARGET_BUF; end;
内容的提问来源于stack exchange,提问作者user130268
相关产品推荐
相关产品推荐

