转换分组十六进制字符到Perl中的比特串
-
21-08-2019 - |
题
我的代表位旗标序列十六进制字符一些256个字符的字符串,我试图将其转换回为一个比特,所以我可以用&
,|
,vec
和类似操纵它们。十六进制字符串被写入整数范围的大端基团,以使得一组像"76543210"
8个字节应转化到比特串"\x10\x32\x54\x76"
,即最低的8位00001000
。
的问题是,pack
的“h
”格式适用于输入中的一个字节的时间,而不是8,所以从只是用它的结果直接将不会以正确的顺序。目前,我这样做:
my $bits = pack("h*", join("", map { scalar reverse $_ } unpack("(A8)*", $hex)));
其中工程,但感觉的hackish。看起来,就必须有一个更清洁的方式,但我pack
福不是很强。有没有更好的办法做到这一点的翻译?
解决方案
my $hex = "7654321076543210"; # can be as long as needed
my $bits = pack("V*", unpack("N*", pack("H*", $hex)));
print unpack("H*", $bits); #: 1032547610325476
不隶属于 StackOverflow