我有一些 256 个十六进制字符的字符串,它们代表一系列位标志,我正在尝试将它们转换回位字符串,以便我可以使用 &
, 操作它们>|
、vec
等。十六进制字符串以整数范围的大端组写入,这样像 "76543210"
这样的 8 字节组应该转换为位字符串 "\x10\x32\x54\x76"
,即最低 8 位为 00001000
。
问题在于 pack
的“h
”格式一次适用于一个输入字节,而不是 8 个字节,因此直接使用它的结果不会按正确的顺序排列。目前我正在这样做:
my $bits = pack("h*", join("", map { scalar reverse $_ } unpack("(A8)*", $hex)));
这可行,但感觉很黑客。似乎应该有一种更干净的方法,但我的 pack
-fu 不是很强。有更好的方法来进行翻译吗?
最佳答案
my $hex = "7654321076543210"; # can be as long as needed
my $bits = pack("V*", unpack("N*", pack("H*", $hex)));
print unpack("H*", $bits); #: 1032547610325476
关于perl - 在 Perl 中将分组的十六进制字符转换为位串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/853845/