Tôi có một chương trình Java phát ra, trong định dạng thập lục phân được phân tách bằng dấu cách, 16 byte của gói dữ liệu thô nhận được qua mạng. Vì tôi không muốn thay đổi mã đó, tôi đang tạo kết quả cho một kịch bản Perl, về mặt lý thuyết, có thể chỉ đơn giản là unpack
điều này từ STDIN
thành các biến dễ nhận biết. Sau đây là một mẫu của các dòng đầu vào tập tin Perl của tôi:Làm cách nào để phân tích cú pháp các chuỗi thập phân STDIN được phân cách bằng dấu cách trong Perl?
FF FF 09 7D 10 01 07 01 00 02 00 1D 00 00 00 00 00 06 00 07 00 |--garbage-----|c--|c--|int---|int---|int---|int---|int---|int---|int---|
(c là cho char/byte, int cho biến số nguyên 16bit)
ban đầu tôi muốn sử dụng unpack
để sạch tách mỗi đầu vào dòng vào các biến mà tôi cần. Tuy nhiên, vì không gian phân cách trong chuỗi, tôi không chắc chắn làm thế nào để xử lý nó (tôi có thể sử dụng 'A' làm mẫu, nhưng sau đó tôi cũng có thể chỉ cần sử dụng chia!)
Có cách nào thanh lịch không sử dụng unpack()
? Tôi không phải là một bậc thầy Perl, nhưng cách khác là, như tôi đã đề xuất trước đây, sử dụng split
và sau đó chuyển đổi thủ công từng hex thành một byte, và sau đó sử dụng thao tác bit và mặt nạ để có được những gì tôi muốn. Bất kỳ đề xuất nào khác (nếu unpack
không lưu ngày)?
Bạn có thể làm cho nó trông đẹp hơn bằng cách nói 'map {hex} split' :) – friedo
Hoặc thậm chí chỉ là' map hex, split' - gần như Haskell! –
thực sự tôi đã xác nhận rằng các byte ở cuối nhỏ. khủng khiếp, khi chúng được gửi qua mạng, tôi đã nghĩ rằng nên có trong thứ tự mạng. Oh well, thay đổi duy nhất sau đó cần phải được giải nén "x5C2n7" để giải nén "x5C2v7", phải không? Và cảm ơn cho trả lời ... diễn đàn này là tuyệt vời – intiha