셸 - 바이너리 파일을 문자별로 16진수 문자로 읽습니다.

셸 - 바이너리 파일을 문자별로 16진수 문자로 읽습니다.

직렬 입력(/dev/tty*)을 문자 단위로 읽으려고 합니다. 해당 프로토콜에 따라 데이터를 구문 분석하는 데 필요합니다. 내 현재 접근 방식은 다음과 같습니다.

while read -rs -n 1 c; do
    echo Read a char:
    echo ${c}
done < "${SERIAL_PORT}"

데이터가 바이너리이고 일부 바이트가 \x00(변수에서 문자로 허용되지 않음)이라는 사실을 제외하고는 작동합니다. 내 목표는 먼저 바이트를 16진수 문자열(2자)로 변환한 다음 이를 변수에 저장하는 것입니다. 이것이 내가 막히는 곳입니다. 이를 수행할 수 있는 좋은 방법이 있습니까? 나는 posix 호환을 유지하는 것을 선호합니다.

답변1

od입력된 각 바이트/문자에 대해 16진수 ASCII 표현을 생성하고 이를 한 번에 출력하는 데 사용됩니다 .

od -v -An -txC <input |
awk '{ for (i = 1; i <= NF; ++i) print $i }'

그러면 한 줄에 하나의 16진수 숫자가 출력됩니다.

원한다면 이 내용을 읽을 수 있지만 read기존 코드에서 처리할 수 있다면 더 좋을 것입니다 awk.

관련 정보