在Perl中将分组的十六进制字符转换为位串

wis*_*nij 4 perl endianness bitstring pack

我有个十六进制字符一些256个字符的字符串代表位标志的序列,我试图将其转换回为一个比特,所以我可以操纵它们&,|,vec等.十六进制字符串是用整数范围的大端组写的,这样一组8个字节就像"76543210"应转换为"\x10\x32\x54\x76"位串,即最低的8位00001000.

问题是pack'" h"格式一次只能输入一个字节,而不是8,因此直接使用它的结果将不是正确的顺序.目前我正在这样做:

my $bits = pack("h*", join("", map { scalar reverse $_ } unpack("(A8)*", $hex)));
Run Code Online (Sandbox Code Playgroud)

哪个有效,但感觉很乱.似乎应该有一个更清洁的方式,但我的pack-fu不是很强大.有没有更好的方法来进行这种翻译?

pts*_*pts 5

my $hex = "7654321076543210";  # can be as long as needed
my $bits = pack("V*", unpack("N*", pack("H*", $hex)));
print unpack("H*", $bits);  #: 1032547610325476
Run Code Online (Sandbox Code Playgroud)