我对Perl开发很新,我想执行以下任务:
我的脚本接收十六进制编码的字符串作为命令行参数.然后我必须解码这个字符串并将其写入输出文件,就像C++数组一样,并根据给定的数据进行初始化.例如:
perl myscript.pl DEADBABEDEADBEEF
和输出的东西一样
const boost::array<char, 8> MyArray = { 0xDE, 0xAD, 0xBA, 0xBE, 0xDE, 0xAD, 0xBE, 0xEF };
使用Perl正则表达式执行此操作的正确方法是什么?当然,我可以用子串循环执行它,但我相信应该有更优雅的方式.
编辑:输入字符串具有固定长度.
试试这个:
my $hex = "DEADBABEDEADBEEF";
my @a = map "0x$_", $hex =~ /(..)/g;
Run Code Online (Sandbox Code Playgroud)
这个怎么运作:
首先,$hex =~ /(..)/g在列表上下文中捕获所有2个字符的子字符串(该/g标志表示全局匹配).然后map()获取列表并将其转换为另一个列表,使用"0x$_"第一个列表中每个元素的表达式($_这里是元素的别名).
小智 5
这个怎么样:
my $input = $ARGV[0];
die "Fouled up input" unless $input =~ /^(?:[0-9A-F]{2})+$/i;
my $bytes = length ($input) / 2;
print "const boost::array<char, $bytes> MyArray = {";
while ($input =~ s/([0-9A-F]{2})//i) {
# print $input # to see how this works, see comment.
print "0x$1, ";
}
print "};\n";
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3576 次 |
| 最近记录: |