[求助]16进制数据移位问题

[求助]16进制数据移位问题

[求助]16进制数据移位问题
假设我有一16进制的数:$test = 0x00000012;
如何通过操作把它变成:0x12000000呢?

如果是循环的移位呢?
即:
$test = 0x12345678
经过一次循环右移后,变成:
0x78123456

ps:哪位大大能提供个perl关于16进制数据操作(+、-、*、/)的文章的url吗?俺的Google技巧还需提高-____-\\\
谢谢




   

[quote]perl -e
[quote]perl -e "$test=0x00000012;printf '%#.8x',$test[color=red]<<[/color](8*7)"

打印结果为:
0x12000000[/quote]
这个比较简单,用 perl 的移位操作符(上面代码中红色部分)即可
后位非零的循环移位就要想点办法了,如下是不考虑数学方法的办法之一:
[quote]#!/usr/bin/perl
# cnhacktnt {at} perlchina.org
# http://www.perlchina.org http://www.wanghui.org
use strict;

my $test=0x12345678;
printf '%#.8x', replace($test,6);


sub replace($$){
my $str=shift;
my $n=shift;
$str=sprintf '%.8x',$str;
my @meta=split(//,$str);
unshift @meta,splice(@meta,$n);
return(hex(join('',@meta)));
}[/quote]
注意,用移位操作符操作后的$test值和replace()函数的返回值都仍然是十六进制的数值,而不是字符串




   

非常感谢两位--cnhacktn.
非常感谢两位
cnhacktnt的解正是我想要的,虽然是在循环左移:)
-___________-!!!!!!!!!![CCB]1[/CCB]




   

呵呵,举一反三,左移都出来.
呵呵,举一反三,左移都出来了,右移还远么? :-P
you are right--replace.
you are right
replace($test,[color=red]-2[/color]);

thx again;-p