2009-10-06 27 views
5

Tôi đang cố gắng chuyển đổi một tập lệnh Perl thành python và nó sử dụng khá nhiều gói khác nhau. Tôi đã có thể tìm ra sự khác biệt chữ trong "mẫu" cho mỗi mẫu, nhưng tôi đang gặp vấn đề với sự hiểu biết về cách xử lý việc thiếu khai báo chiều dài của Perl.Làm cách nào để chuyển đổi định dạng gói 'Nc *' của Perl thành struct.pack cho Python?

dụ:

pack('Nc*',$some_integer,$long_array_of_integers); 

Tôi không thấy một analog cho điều này "*" trong struct.pack, trên Python. Bất kỳ ý tưởng về cách chuyển đổi này sang Python?

Trả lời

7

Làm thế nào về điều này?

struct.pack('>I', some_integer) + struct.pack('b'*len(long_array), *long_array) 
+0

Tôi thích ý tưởng của bạn để giữ tất cả bên trong phương thức pack(), nhưng tôi nhận được "struct.error: pack yêu cầu chính xác x đối số" và không thể lừa nó vào giải nén (không có ý định chơi chữ) . – ewall

+0

@ewall: có lỗi đánh máy nhỏ, sửa mã. – abbot

1

Gói của Perl đang sử dụng ký tự '*' tương tự như trong cụm từ thông dụng - nghĩa là ký tự đại diện cho nhiều ký tự giống nhau. Ở đây, tất nhiên, nó có nghĩa là nhiều ints đã ký.

Trong Python, bạn chỉ muốn lặp qua chuỗi và concat các mảnh:

result = struct.pack('>L', some_integer) 
for c in long_array_of_integers: 
    result += struct.pack('b',c) 
Các vấn đề liên quan