需要帮助使用perl解释字符串的字符

neb*_*lus -2 perl winapi character-encoding

究竟是什么输出(哪个characterset)以及如何将其转换为有意义的东西?替代文字

use Win32::API;

$EnumProcesses= new Win32::API( 'psapi', 'EnumProcesses','PNP');

$aBuffer = " " x 4096;
$bBuffer = " " x 4096;

$EnumProcesses->Call($aBuffer,4096,$bBuffer);
print $aBuffer,"\n",$bBuffer,"\n";
Run Code Online (Sandbox Code Playgroud)

Phi*_*ter 6

您是否阅读过EnumProcesses文档和其中链接的示例?看起来你根本就没有处理角色数据.EnumProcesses填充$abufferN个4字节(或DWORD)记录,每个进程一个.这个4字节的值只是一个数字,而不是4个字符.

如果要获取有关特定进程的更多信息,则需要将此4字节数字(在Win API文档中称为"进程标识符")提供给OpenProcess或PrintProcessNameAndID 等函数.

这是将结果显示为4字节小端数的代码:

use Modern::Perl; # strict, warnings, 5.10 features
use Win32::API;

my $EnumProcesses= new Win32::API( 'psapi', 'EnumProcesses','PNP');

my $process_ids_packed = " " x 4096;
my $num_processes_packed = " " x 4; # you don't need 4096 here.

$EnumProcesses->Call($process_ids_packed,4096,$num_processes_packed);

my ($num_processes) = unpack "V", $num_processes_packed;
my @process_ids = unpack "V$num_processes", $process_ids_packed;

for (@process_ids) {
    say;
}
Run Code Online (Sandbox Code Playgroud)

这是结果:

C:\Users\pgp\Documents\src\tmp>perl winapi.pl
0
4
252
392
464
472
520
536
544
596
692
748
780
788
912
964
412
456
908
1116
1212
1228
1460
1492
1520
1528
1576
1724
1740
1748
1988
2028
312
2288
2544
2592
2756
3004
3116
3216
3340
3048
2792
1320
2868
3760
2404
4196
2692
4084
1768
538976288
538976288
538976288
538976288
538976288
 [... lots more lines ...]
538976288
538976288
538976288
538976288
538976288
538976288
Run Code Online (Sandbox Code Playgroud)