Hexdump 데이터를 특정 형식으로 정렬하시겠습니까?

Hexdump 데이터를 특정 형식으로 정렬하시겠습니까?

나는 Raspberry Pi에서 직렬 데이터를 읽고 있습니다. 내가 하는 일은 Hexdump입니다. 헤더를 찾은 다음 헤더에 있는 데이터의 두 번째 바이트로 이동해야 합니다. 예: ed 13 74, 값을 가져와야 합니다. 4인 경우 변환은 이를 10진수로 변환하고 2를 더합니다(이 경우 4+2 = 6). 헤더에서 6바이트의 데이터를 읽어야 합니다.

다시 앞으로 이동해야 하며 헤더가 있는 다음 패킷을 찾아 동일한 작업을 반복해야 합니다.

대본을 써서 다 하려고 했는데

답변1

귀하의 설명은 제공된 16진수 덤프와 완전히 일치하지 않습니다. 왜냐하면 그 이후의 두 번째 바이트가 모두 이기 때문 ed입니다 00. 그러나 지금 당장 Unix에서 문자열 처리를 위한 보다 정교한 도구 중 하나 이상을 마스터해야 합니다 awk.

각 줄에 16진수를 입력하면 데이터 흐름을 단순화할 수 있습니다. 귀하의 예를 사용하여 파이프할 수 있습니다 tr -s ' ' '\n'. 그러나 더 유용하게도 이렇게 하면 man hexdump더 이상 조작할 필요가 없도록 한 줄에 하나의 숫자를 인쇄하여 출력 형식을 지정하는 옵션이 제공된다는 것을 알 수 있습니다. 예를 들어

hexdump -v -e '1/1 "%02x\n"'

유사한 데이터가 제공됩니다

2f
ed
3f
00
08

해당 데이터를 이 스크립트에 연결합니다.

awk '$1=="ed" {
    getline byte1
    getline byte2
    number = strtonum("0x" substr(byte2,2,1))
    print "len is " number
    data = byte1 byte2
    while(number-->0){getline byte; data = data byte}
    print data
} '

이는 라인의 첫 번째 단어 가 다음 라인을 변수 byte1로 읽고 다음 라인을 변수 byte2로 읽는 ed데 사용되는지 확인합니다. 마지막 문자를 getline가져와서 "0x"로 연결하고 16진수를 10진수로 변환하는 호출을 호출합니다. 루프 는 getline을 여러 번 호출하고 데이터를 연결합니다.substr()strtonumwhile

관련 정보