Tôi đang viết trình phân tích cú pháp cho định dạng nhị phân. Định dạng nhị phân này liên quan đến các bảng khác nhau, một lần nữa trong định dạng nhị phân có chứa các kích thước trường khác nhau thường (một nơi nào đó giữa 50 - 100 trong số chúng).Truy cập bitfields trong khi đọc/ghi cấu trúc dữ liệu nhị phân
Hầu hết các công trình này sẽ có bitfields và sẽ trông giống như thế này khi đại diện trong C:
struct myHeader
{
unsigned char fieldA : 3
unsigned char fieldB : 2;
unsigned char fieldC : 3;
unsigned short fieldD : 14;
unsigned char fieldE : 4
}
Tôi đã xem qua các mô-đun struct nhưng nhận ra rằng độ phân giải thấp nhất là một byte và không một chút, nếu không mô-đun khá nhiều là phù hợp với công việc này.
Tôi biết bitfields được hỗ trợ bằng cách sử dụng ctypes, nhưng tôi không chắc chắn làm thế nào để giao diện cấu trúc ctypes chứa bitfields tại đây.
Tùy chọn khác của tôi là tự thao tác các bit và cho nó vào các byte và sử dụng nó với mô-đun cấu trúc - nhưng vì tôi có gần 50-100 loại cấu trúc khác nhau, viết mã để trở thành lỗi hơn- dễ bị. Tôi cũng lo lắng về hiệu quả vì công cụ này có thể được sử dụng để phân tích các gigabyte dữ liệu nhị phân lớn.
Cảm ơn.
cũng có thư viện thao tác bit/bit bit của bên thứ ba. – agf
Nó sẽ là một số lượng công việc, nhưng bạn có thể thiết kế một lớp có thể phân tích các định nghĩa cấu trúc kiểu C (hoặc một cái gì đó tương tự như chúng loại bỏ sự mơ hồ đóng gói) thành một bộ mặt nạ cho mỗi bitfield, đọc dữ liệu qua mô-đun cấu trúc để đạt đến cấp độ byte và cung cấp quyền truy cập '__getattr__'. –
Có, tôi đã xem qua các công cụ này - [python-bitstring] (http://code.google.com/p/python-bitstring/), [Construct] (http://construct.wikispaces.com/tut-basics)), [BitReader] (https://bitbucket.org/jtoivola/bitreader/wiki/Home) - và đọc qua tài liệu của họ.Bit Reader có vẻ như một giải pháp khả thi nhưng tôi thấy [ở đây] (http://blog.mfabrik.com/2010/09/08/bitreader-python-module-for-reading-bits-from-bytes/) rằng hiệu suất sẽ là một hit lớn. Xây dựng như xa như tôi có thể tìm thấy từ tài liệu cơ bản của họ không hỗ trợ các lĩnh vực bit. Python-bitstring âm thanh đầy hứa hẹn và cần phải đào sâu hơn một chút – Tuxdude