Alinhando dados hexadump em um formato específico?

1

Estou lendo dados seriais do meu Raspberry Pi e tudo o que estou fazendo é um Hexdump Eu tenho que encontrar o cabeçalho e, em seguida, ir para o segundo byte de dados do cabeçalho por ex: ed 13 74, eu tenho que tomar o valor 4, convertê-lo em decimal e adicionar 2 a ele (neste caso, o seu 4 + 2 = 6) e eu tenho que ler 6 bytes de dados do cabeçalho

Mais uma vez eu tenho que avançar para encontrar o próximo pacote com cabeçalho e repetir o mesmo

Estou tentando fazer tudo isso escrevendo um script

    
por RajuBhai 22.04.2016 / 16:51

1 resposta

0

Sua descrição não combina bem com o hexdump fornecido, já que todos os segundos bytes após ed são 00 . No entanto, você deve tentar dominar pelo menos uma das ferramentas mais sofisticadas do Unix para manipulação de strings, ou seja, awk .

Você pode simplificar seu fluxo de dados, colocando exatamente um número hexadecimal por linha. Com o seu exemplo, você pode canalizá-lo através de tr -s ' ' '\n' . No entanto, mais útil se você fizer man hexdump você pode ver que fornece opções no formato de saída para imprimir um número por linha, para que você não precise manipulá-lo ainda mais. Por exemplo

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

fornecerá dados como

2f
ed
3f
00
08

canaliza os dados para esse script

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
} '

Isto verifica se a primeira palavra na linha é ed , então usa getline para ler a próxima linha na variável byte1, e a linha depois em byte2. O substr() pega o último caractere, concatena com "0x" e chama strtonum para converter o hexa em decimal. O loop while chama getline esse número de vezes e concatena os dados.

    
por 22.04.2016 / 21:09