perl - Perl printf 换行符
问题描述
希望在从 j 打印的 100 个字节中的每 16 个字节后添加一个换行符。目前所有 100 个字节都打印在一行上。
任何帮助都会非常充分,谢谢。
for ($j = 6; $j < 106; $j++)
{
printf("%02X ", hex(@bytes[$j]));
}
printf("\t");
谢谢大家。我以另一种方式接近它。最后,视觉方面不是问题,因为我最终还是打印了文件。然后将这些数据粘贴到十六进制编辑器中,因此格式化是一种预先考虑而不是需要。下面现在输出我最终寻找的所有数据,而不是预定的长度。
for ($j = 6; $j < @bytes; $j = $j + 1)
{
printf outfile ("%02X ", hex(@bytes[$j]));
}
printf("\n");
解决方案
用于splice()
一次从数组中抓取 16 个元素。
我也改用say()
,join()
和.map()
sprintf()
#!/usr/bin/perl
use strict;
use warnings;
use feature 'say';
my @bytes = map { int(rand(255)) } 0..200;
# As splice is destructive, take a copy of the array.
# Also, let's remove those first six elements and any
# after index 106.
my @data = @bytes[6 .. 105];
while (my @row = splice @data, 0, 16) {
say join ' ', map { sprintf '%02X', $_ } @row;
}
更新:为您提供更多 Perl 技巧。
- 始终将
use strict
和添加use warnings
到您的 Perl 程序的顶部。并解决他们将向您展示的问题。 @bytes[$j]
最好写成$bytes[$j]
(因为它是一个单一的值)。这是use warnings
要告诉你的事情之一。for ($j = 6; $j < 106; $j++)
可能最好写成for my $j (6 .. 105)
. “一个接一个”错误的可能性较小。- 实际上,由于您只是
$j
用来从数组中获取元素,您可能只想直接遍历数组的元素 -for my $elem (@bytes[6 .. 105])
(然后使用$elem
代替$bytes[$j]
)。
推荐阅读
- laravel - UpdateOrCreate 用于多板表,Laravel
- r - 如何在 R 中插值/近似数据?
- java - 当您切换到横向模式时,如何确保纵向模式下的数据显示数据完全相同的位置/索引?
- visual-studio - 从 Visual Studio 2019 推送 docker 映像时,服务任务在 aws ecs fargate 中处于挂起状态
- amazon-sagemaker - 在本地模式下运行 sagemaker python sdk sklearn 时出现 S3 权限错误
- wix - NOT UPGRADINGPRODUCTCODE 在自定义操作的重大升级时评估为 true
- reactjs - 仅在 Gatsby 的特定页面上加载 Snipcart
- sql - SQL:如何获取下一个非空值
- java - Java图像裁剪打破了libpng的PNG
- c++ - Boost Graph Library,修复节点大小