Bash에서 문자열을 16진수로 읽는 방법은 무엇입니까?

Bash에서 문자열을 16진수로 읽는 방법은 무엇입니까?

나는 bash 라인을 가지고 있습니다 :

expr substr $SUPERBLOCK 64 8

이것은 나에게 반환된 문자열 라인입니다:

00080000

나는 이것이 실제로 리틀 엔디안 바이트 순서로 0x00080000이라는 것을 알고 있습니다. Bash에서 빅 엔디안 모드(예: 0x80000)로 정수 변수를 생성하는 방법이 있습니까?

답변1

이 작업을 수행하는 더 좋은 방법이 있을 수 있지만 숫자를 10진수로 변환한 다음 다시 16진수로 변환하고 수동으로 추가하는 이 솔루션을 생각해 냈습니다 0x.

printf '0x%x\n' "$((16#00080000))"

당신은 쓸 수 있습니다:

printf '0x%x\n' "$((16#$(expr substr "$SUPERBLOCK" 64 8)))"

답변2

서로 다른 베이스 간에 숫자를 변환하는 매우 간단한 방법을 제공하는 다소 표준적인(그리고 고대의) 명령줄 유닉스 도구가 두 가지 있습니다.

$ { echo '16'; echo i; echo 00080000; echo p; } | dc
524288
$ { echo 'ibase=16'; echo 00080000; } | bc  
524288

일반적인 사람이 사용하는 경우에는 매우 마음에 들지만 bc, 특히 일종의 파서에서 코드를 생성하는 프로그램을 작성할 때 스택 기반 도구를 dc사용하는 것이 더 쉬울 수 있습니다(사실 원래 버전은 bc프런트엔드 파서였습니다). dc).

관련 정보