【发布时间】:2014-07-30 03:26:58
【问题描述】:
读取包含地址和数据的文件,如下所示:
@0, 12345678
@1, 5a5a5a5a
...
我的目标是读取地址和数据。考虑我读取的数据是十六进制格式,然后我需要将它们解包为二进制数。
所以12345678 会变成00010010001101000101011001111000
然后,我需要将传输的二进制数进一步解包到另一个级别。
所以它变成了,00000000000000010000000000010000000000000001000100000001000000000000000100000001000000010001000000000001000100010001000000000000
他们的做法如下所示
while(<STDIN>) {
if (/\@(\S+)\s+(\S+)/) {
$addr = $1;
$data = $2;
$mem{$addr} = ${data};
}
}
foreach $key (sort {$a <=> $b} (keys %mem)) {
my $str = unpack ('B*', pack ('H*',$mem{$key}));
my $str2 = unpack ('B*', pack ('H*', $str));
printf ("@%x ", $key);
printf ("%s",$str2);
printf ("\n");
}
它有效,但是,我的下一步是对传输的位进行一些数字运算。 例如按位或和移位。我试过
如果您有更好的想法,请留下您的 cmets。谢谢。
【问题讨论】:
-
先做算术,然后转换成一串一和零。
-
tripleee:我想对最后的 256bits 二进制数做一个移位,我不知道怎么做。
-
是的,在实际数字上,而不是在它们的字符串表示上。而不是“unpack; unpack; shift”做“unpack; shift; unpack”。
-
你能举个例子吗?
-
@tripleee 如果不使用一些
bigint库,您不能简单地对 256 位数字进行算术运算。
标签: perl