나는 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
).