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

如何在Perl中将带\x的Postgres bytea十六进制字符串转ASCII?

解决\x开头的Postgres bytea数据解码问题

你的问题核心在于Perl编译时会自动解析\x开头的两位十六进制转义字符,导致变量实际存储的内容是F726f6d3a20224d(\x46被转成F,剩余部分保留原始十六进制字符),而非完整的十六进制串。针对这种已被预解析的字符串,可以通过以下方式还原:

具体实现代码

my $value = "\x46726f6d3a20224d"; # 实际存储为"F726f6d3a20224d"

# 方法一:分步处理
my $first_hex = unpack('H2', substr($value, 0, 1));
my $full_hex = $first_hex . substr($value, 1);
my $result = pack('H*', $full_hex);
print $result; # 输出:From: "M"

# 方法二:正则一行处理
$value =~ s/^(.)(.*)/pack('H*', unpack('H2', $1) . $2)/e;
print $value; # 输出:From: "M"

原理说明

  • unpack('H2', $char):将单个字符转换为对应的两位十六进制字符串(比如F转为46)
  • 拼接首字符的十六进制值与剩余的十六进制字符,得到完整的原始十六进制串46726f6d3a20224d
  • pack('H*', $hex_str):将十六进制串解码为对应的ASCII字符

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 19:05:45