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

标签 perl endianness pack bitstring

我有一些 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/

相关文章:

python - 从struct.pack打印出打包结果

java - 打包,但不要变小

java - JDialog.pack() 隐藏 JLabel

perl - 在 Perl 中读取文件第一个和最后一个字节数的最有效方法

php - MediaWiki 如何组成图像路径?

c - 大端字节数组到 C、arm 中的小端结构元素

c - 为什么我收到的IP地址是反的?给定 - 12.0.0.100,在 C 中收到为 100.0.0.12

perl - 在 perl 中用引号打印 @

perl - Microsoft Word 到组织模式

c++ - 为什么在将 short[] 转换为 char* 时数组会反转?