Vì vậy, tôi đang cố gắng tìm ra lý do tại sao kích thước của ctypes.Structure
của tôi không phải là những gì nó nên được. Mã của tôi là sau đây, theres cũng tính toán những gì kích thước nên được afaik.python ctypes cấu trúc sai kích thước byte
class FILE_HEAD(ctypes.Structure):
_fields_ = [
("name", ctypes.c_char * 4), # 4 bytes
("size", ctypes.c_int), # 4 bytes
("Cal_l", ctypes.c_double), # 8 bytes
("Cal_r", ctypes.c_double), # 8 bytes
("Speed_ChL", ctypes.c_byte), # 1 byte
("Speed_Pulses_ChL", ctypes.c_int), # 4 bytes
("Speed_factor_ChL", ctypes.c_double), # 8 bytes
("Quantity_ChL", ctypes.c_char * 3), # 3 bytes
("Description_ChL", ctypes.c_char * 32), # 32 bytes
("Unit_ChL", ctypes.c_char * 8), # 8 bytes
("Speed_ChR", ctypes.c_byte), # 1 byte
("Speed_Pulses_ChR", ctypes.c_int), # 4 bytes
("Speed_factor_ChR", ctypes.c_double), # 8 bytes
("Quantity_ChR", ctypes.c_char * 3), # 3 bytes
("Description_ChR", ctypes.c_char * 32), # 32 bytes
("Unit_ChR", ctypes.c_char * 8) # 8 bytes
] # = 136 bytes
Vì vậy, tôi nghĩ rằng cấu trúc nên có kích thước 136 byte. Nhưng khi tôi cho python in kích thước của một thể hiện của cấu trúc print ctypes.sizeof(COMI_HEAD)
Tôi nhận được 144
. Tôi không biết 8 byte đó đến từ đâu.
Tôi đã điền dữ liệu đó vào và ghi vào tệp để xem tất cả các byte và phân tích các byte.
comi = FILE_HEAD()
comi.name = "COMI"
comi.size = ctypes.sizeof(comi) - 8
comi.Cal_l = 342.324
comi.Cal_r = 342.324
comi.Speed_ChL = ctypes.c_byte(1)
comi.Speed_Pulses_ChL = 123
comi.Speed_factor_ChL = 123.456
comi.Quantity_ChL = "Tes"
comi.Description_ChL = "Test Desc"
comi.Unit_ChL = "t/t"
comi.Speed_ChR = ctypes.c_byte(1)
comi.Speed_Pulses_ChR = 123
comi.Speed_factor_ChR = 123.456
comi.Quantity_ChR = "Tes"
comi.Description_ChR = "Test Desc"
comi.Unit_ChR = "t/t"
Dưới đây là những gì Trình xem HEX của tôi hiển thị cho tôi. Tôi đã đánh dấu màu đỏ, mà byte tôi nghĩ là 8 byte là quá nhiều, nhưng tôi không biết nơi mà 8 byte đến từ. 3 byte đầu tiên tôi đánh dấu đến trực tiếp sau Speed_ChL
phải là 1 byte nhưng trông giống như 4 byte của nó. 5 byte tiếp theo tôi đã đánh dấu ở cuối tệp. Có chuỗi này Unit_ChR
phải là 8 byte nhưng có vẻ như là 13 byte.
Ai đó có thể cho tôi biết sai lầm của tôi ở đâu? Tôi làm gì sai ở đây? Bất kỳ trợ giúp được đánh giá cao!
Tôi nghĩ rằng nó chỉ là sắp xếp các thành viên để chúng bắt đầu ở vị trí đẹp. –
ok ... tôi có thể ngăn chặn điều đó bằng cách nào đó không? Tôi thực sự cần rằng '0's để biến mất – patsimm
Không thực sự chắc chắn. Bạn đang sắp xếp nó? Tôi nghĩ rằng padding có thể khác nhau tùy thuộc vào phần cứng vì vậy đó không phải là một ý tưởng tốt. –