Uzaydan ayrı onaltılık biçimde, ağ üzerinden alınan 16 baytlık işlenmemiş paket halinde tüküren bir Java programım var. Bu kodu değiştirmek istemediğimden, sonucu teorik olarak unpack
'un STDIN
'dan tanınabilir değişkenlere dönüştürebileceği bir Perl betiğine pipetliyorum. Perl dosyasına hat girişi, bir örnek aşağıda verilmektedir:Perl'de açılmadan ayrılmış STDIN altıgen dizeleri nasıl ayrıştırabilirim?
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---|
Başlangıçta temiz her giriş ayırmak için unpack
kullanmak istediğini
(c, karakter/bayt için 16 bit tamsayı değişken için int) ihtiyacım olan değişkenlere doğru Ancak, dizedeki boşluk sınırından dolayı, nasıl işleyeceğimi bilmiyorum ('A'yı bir şablon olarak kullanabilirim, ancak sonra da sadece bölme kullanabilirim!)
Zarif bir yol var mı? unpack()
kullanıyor? Ben bir Perl ustası değilim, ama diğer yolu, daha önce önerdiğim gibi, split
kullanın ve daha sonra her bir hex'i bir bayta dönüştürün ve sonra istediğimi elde etmek için bit manipülasyonları ve maskeler kullanın. Başka öneriler (unpack
günü kaydetmezse)?
Harita {hex} split ':) – friedo
diyerek daha güzel görünebilir veya hatta sadece' map hex, split '- neredeyse Haskell! –
aslında baytların küçük bir endian olduğunu doğruladım. Wierd, bir ağ üzerinden gönderildikçe, ağ düzeninde olması gerektiğini düşünürdüm. Oh, peki, sadece "x5C2v7" paketini açmak için "x5C2n7" paketini açmanız gerekiyor, değil mi? Ve cevap için teşekkürler ... Bu forum harika – intiha