редактировать
Вы должны уточнить, что вы говорите. На моем питоне (2.7.2) это неправильно:
FILE.write(data)
потому что data
должна быть строкой. Я думаю, что вы хотите сказать вместо этого:
data.tofile(FILE)
В любом случае, это то, что вы хотите?
print pack("s*", unpack("C*", "abcd"))
# piped through xxd => 0000000: 6100 6200 6300 6400 a.b.c.d.
Просмотрите perldoc -f pack
правильную строку шаблона для использования. Поскольку у вас нет доступа к W
(неподписанный wchar), я использую C
(неподписанный символ). s
является подписанным коротким (соответствует h
. Python)
/ редактировать
В Perl нет типизированных массивов. ord
возвращает числовое значение первого символа его аргумента.
Предполагая, что это именно то, что вам нужно, просто сопоставьте список, полученный в результате разбиения $packet
для каждого символа, на @data
, преобразовав каждый элемент с ord
(аргумент $_
неявно задан).
my @data = map { ord } split //, $packet; # or
my @data = unpack 'W*', $packet;
При желании можно использовать диапазон, отличный от фактических нижних и верхних границ $packet
:
(split //, $packet)[$start .. $end]; # or
split //, substr $packet, $start, $end # ysth's version