필자는 공간 분리 된 16 진수 형식의 16 진수 형식의 원시 패킷을 네트워크를 통해 수신하는 Java 프로그램을 가지고 있습니다. 그 코드를 변경하고 싶지 않기 때문에 이론적으로 단순히 unpack
this를 STDIN
에서 인식 가능한 변수로 변환 할 수있는 Perl 스크립트로 결과를 파이프합니다. 내 펄 파일의 라인 입력의 샘플은 다음과 같습니다Perl에서 압축을 푼 공간 분리 된 STDIN 16 진수 문자열을 어떻게 파싱 할 수 있습니까?
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---|
내가 처음에 깔끔하게 각 입력을 구분 unpack
을 사용하고 싶었
(C는 문자/바이트에 대한 16 비트 정수 변수가 int) 내가 필요로하는 변수에 줄을 써라. 그러나 문자열의 공백 구분으로 인해 나는 그것을 처리하는 방법을 잘 모르겠다. (나는 'A'를 템플릿으로 사용할 수 있지만 split을 사용해야 할 수도있다.)
우아한 방법이 있는가? unpack()
을 사용하고 계십니까? 나는 Perl 마스터가 아니지만 다른 방법은 앞서 제안한대로 split
을 사용하고 수동으로 각 16 진수를 바이트로 변환 한 다음 비트 조작과 마스크를 사용하여 원하는 결과를 얻는 것입니다. 다른 제안 (unpack
이 그 날을 저장하지 않는다면)?
'map {hex} split'을 쓰면 더 예쁘게 보이게 할 수 있습니다 :) – friedo
아니면'Map hex, split' - 거의 하스켈! –
실제로 바이트가 리틀 엔디안인지 확인했습니다. wierd, 그들이 네트워크를 통해 전송되면서, 나는 그것이 네트워크 순서에 있어야한다고 생각했을 것이다. 오 그럼, 유일한 변화는 "x5C2v7"의 압축을 풀 때 "x5C2n7"의 압축을 풀어야합니다. 그리고 답장을 보내 주셔서 감사합니다 ...이 포럼은 최고입니다 – intiha