我有一个包含十六进制数字的长字符串.用一个补码(也用十六进制)替换每个数字的最佳方法是什么?
也就是说,如果我有
$string = "d3e5d1b8 66300f40 16010f2e \ncc1e010f 00b0b802 bbd0000f e38e0098 \n"
Run Code Online (Sandbox Code Playgroud)
我想得到
$string = "2b1a2e47 99bff0cf e9fef0d1 \n33e1fef0 ff4f47fd 442ffff0 1b71ff67 \n";
Run Code Online (Sandbox Code Playgroud)
我现在的解决方案是替换16个十六进制数字中的每一个
$string=~s/0/g/g; $string=~s/f/0/g; $string=~s/g/f/g;
...
...
16 times
Run Code Online (Sandbox Code Playgroud) 我想在Perl中打印时将字符串格式化(用字符截断/追加)到指定的长度.
例如
$string='my_string';
printf("%04s",$string);
Run Code Online (Sandbox Code Playgroud)
应该打印
my_s
Run Code Online (Sandbox Code Playgroud)
如果
$string='my';
Run Code Online (Sandbox Code Playgroud)
我应该得到
00my
Run Code Online (Sandbox Code Playgroud)
有没有办法打印最后四个字符?
ring
Run Code Online (Sandbox Code Playgroud)
如果字符串是
$string='my';
Run Code Online (Sandbox Code Playgroud)
它应该打印
00my
Run Code Online (Sandbox Code Playgroud) 有没有办法增加Perl警告的冗长程度?我用它来生成警告.
#!/usr/bin/perl -w
Run Code Online (Sandbox Code Playgroud)
我对偶尔遇到的以下内容特别感兴趣.无论如何,Perl可以打印未初始化变量的名称吗?
Use of uninitialized value in printf at ./script.pl line 106, <LOG> line 323805.
Run Code Online (Sandbox Code Playgroud) 我做一个
git pull
Run Code Online (Sandbox Code Playgroud)
我遇到合并冲突。我手动解决了合并冲突并再次发出 pull 但 Git 拒绝这样做,因为 Git 仍然认为存在合并冲突。
有什么方法可以强制 Git 再次执行 pull 并让它从头部寻找“差异”(如果有的话)(不提交我所做的更改)?
有没有一种简单的方法可以向 xxd 生成的十六进制转储添加偏移量?
即代替
0000: <data>
0004: <data>
0008: <data>
Run Code Online (Sandbox Code Playgroud)
我应该得到
Offset+0000: <data>
Offset+0004: <data>
Offset+0008: <data>
Run Code Online (Sandbox Code Playgroud) 文件A:
1
3
5
7
Run Code Online (Sandbox Code Playgroud)
档案B:
2
4
6
8
Run Code Online (Sandbox Code Playgroud)
可以在shell脚本中使用文件A和文件B作为输入,并获得文件C的输出,其内容如下:
1
2
3
4
5
6
7
8
Run Code Online (Sandbox Code Playgroud) 如何提高这个简单的python代码的性能?这不是re.search
寻找匹配线的最佳方法,因为它比Perl慢约6倍,或者我做错了什么?
#!/usr/bin/env python
import re
import time
import sys
i=0
j=0
time1=time.time()
base_register =r'DramBaseAddress\d+'
for line in open('rndcfg.cfg'):
i+=1
if(re.search(base_register, line)):
j+=1
time2=time.time()
print (i,j)
print (time2-time1)
print (sys.version)
Run Code Online (Sandbox Code Playgroud)
此代码大约需要0.96秒才能完成(平均10次运行)
输出:
168197 2688
0.8597519397735596
3.3.2 (default, Sep 24 2013, 15:14:17)
[GCC 4.1.1]
Run Code Online (Sandbox Code Playgroud)
而以下Perl代码在0.15秒内完成.
#!/usr/bin/env perl
use strict;
use warnings;
use Time::HiRes qw(time);
my $i=0;my $j=0;
my $time1=time;
open(my $fp, 'rndcfg.cfg');
while(<$fp>)
{
$i++;
if(/DramBaseAddress\d+/)
{
$j++;
}
}
close($fp);
my $time2=time;
printf("%d,%d\n",$i,$j);
printf("%f\n",$time2-$time1);
printf("%s\n",$]);
Run Code Online (Sandbox Code Playgroud)
输出:
168197,2688
0.135579
5.012001 …
Run Code Online (Sandbox Code Playgroud) 有没有办法来覆盖sub a
的class_1_1
,并class_2_1
用新的行为(两者相同的类)不增加重写的方法都class_1_1
和class_2_1
?
package class_0
sub a
sub b
1;
package class_1
use parent 'class_0'
sub b
1;
package class_2
use parent 'class_0'
sub b
1;
package class_1_1
use parent 'class_1'
1;
package class_2_1
use parent 'class_2'
1;
Run Code Online (Sandbox Code Playgroud) 是否有一种简单的方法,使用子程序,可以在Perl中打印字符串而不必转义每个特殊字符?
这就是我想要做的:
print DELIMITER <I don't care what is here> DELIMITER
Run Code Online (Sandbox Code Playgroud)
因此,如果我可以将字符串作为分隔符而不是特殊字符,那么显然会很棒.
我试图将大约6400万个64位唯一无符号整数散列到1.28亿个桶(27位宽地址).我尝试了Bob Jenkin的HashLittle和Murmur哈希(这些哈希函数都提供了32位哈希值,我将其屏蔽以获得27位地址).在这两种情况下,它导致大约22%的碰撞,最终只占据了37%的水桶.这是预期还是我做错了什么?我期待更少的碰撞和更好的铲斗占领.