Perl 打包/解包和二进制字符串的长度

标签 perl bytearray pack unpack

考虑这个简短的例子:

$a = pack("d",255);
print length($a)."\n";
# Prints 8

$aa = pack("ddddd", 255,123,0,45,123);
print length($aa)."\n";
# Prints 40

@unparray = unpack("d "x5, $aa);
print scalar(@unparray)."\n";
# Prints 5

print length($unparray[0])."\n"
# Prints 3

printf "%d\n", $unparray[0] '
# Prints 255

# As a one-liner:
# perl -e '$a = pack("d",255); print length($a)."\n"; $aa = pack("dd", 255,123,0,45,123); print length($aa)."\n"; @unparray = unpack("d "x5, $aa); print scalar(@unparray)."\n"; print length($unparray[0])."\n"; printf "%d\n", $unparray[0] '

现在,我希望 double float 为八个字节,因此第一个 length($a) 是正确的。但为什么解包后的长度 (length($unparray[0])) 报告 3 - 当我试图以完全相同的方式返回时( double ,即八个字节) -项目 (255) 的值是否正确保留?

最佳答案

通过解包你打包的东西,你已经得到了原始值,第一个值是 255。255 的字符串化是“255”,它有 3 个字符长,这就是 length 告诉你。

关于Perl 打包/解包和二进制字符串的长度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8320880/

相关文章:

perl - 为什么 Perl 和 Word VBA 中的 Word 文档页数不同?

regex - 如何从终端中的文件运行 perl 正则表达式列表

perl - 如何检查 Perl 数组是否包含特定值?

c - 打包两个 8 位值

java - 为什么我无法刷新ListWindow的内容

python - 为什么在尝试打印这个打包结构时会得到这个输出?

regex - Perl:正则表达式的最大值?

javascript - 在没有 Canvas 的情况下将字节数组转换为图像数据

.net - 结构到字节数组以通过套接字发送

python - 使用 struct.pack python 打包字符串和 int 类型的列表