답변:
와 bash
(또는 제공하는 쉘 printf
명령을 사용할 수 (주로 껍질에 내장 된 표준 POSIX 명령)) :
printf '%x\n' 85
을 사용 zsh
하여 다음을 수행 할 수도 있습니다.
dec=85
hex=$(([##16]dec))
이것은 2에서 36까지의 0-9a-z
밑수에 적용됩니다 (숫자로 대소 문자를 구분하지 않음).
을 사용 ksh93
하면 다음을 사용할 수 있습니다.
dec=85
base54=$(printf %..54 "$dec")
2에서 64 사이 0-9a-zA-Z@_
의 자릿수로 작동합니다.
로 ksh
하고 zsh
, 또한있다 :
$ typeset -i34 x=123; echo "$x"
34#3l
ksh88에서 최대 36, zsh 및 pdksh 및 ksh93에서 64까지 제한됩니다.
그것들은 모두 long
시스템 의 정수 크기로 제한됩니다 ( int
일부 쉘 포함). 더 큰 경우에는 bc
또는 을 사용할 수 있습니다 dc
.
$ echo 'obase=16; 9999999999999999999999' | bc
21E19E0C9BAB23FFFFF
$ echo '16o 9999999999999999999999 p' | dc
21E19E0C9BAB23FFFFF
POSIX에서 요구되는 2에서 일부 수까지 지원되는 기수 범위는 99 이상이어야합니다. 16보다 큰 기수의 경우 9보다 큰 숫자는 공백으로 구분 된 0으로 채워진 10 진수로 표시됩니다.
$ echo 'obase=30; 123456' | bc
04 17 05 06
또는와 같았습니다 dc
(이전 bc
에는 래퍼로 사용되었지만 여전히 일부 시스템에 있음 dc
).
$ echo 30o123456p | dc
04 17 05 06
#
합니까?
bash
내장 명령을 수행 할 수 있습니다 입력 다른 기지의 경우 8, 10, 16 이외의 기지에있는 기지의 숫자가 아니라 출력, 당신은 같은 다른 쉘 필요할 것 zsh
또는 ksh
또는 사용 bc/dc
.
alias hex="printf '%x\n'"
printf를 사용하십시오 :
$ printf "%d %x\n" $((16#55)) $((10#85))
85 55
변수 사용 명령 대체에 값을 지정하려면 다음을 수행하십시오.
$ x=$( printf "%x" 85 ) ; echo $x
55
-v
내장 printf 옵션을 사용하십시오 :printf -v foo "%d" $((16#BEEF)); echo $foo
-v
필요가 없습니다. 나는 그것을 피할 것이다.
-v
포크와 파이프를 피할 것입니다 (bash에서 ksh93이 아니라 printf
내장 된 것처럼 포크하지 않습니다 ). 참고 $((16#55))
하나의 표준이 아니다.
x=$(some_builtin)
있습니까?
모든 POSIX 호환 쉘에 내장 된 산술 확장 대체를 사용하십시오. 요즘에는 거의 보편적입니다.
$ echo $((0xbc))
188
과
$ hex=dead
$ dec=$((0x$hex))
$ echo $dec
57005
주의 : 특히 마지막 예에서 확장은 예기치 않은 결과를 초래할 수 있습니다. 변수 'hex'의 16 진수는 올바른 16 진 상수를 형성해야합니다. 그렇지 않으면 잠재적으로 모호한 오류 메시지가 발생합니다. 예를 들어 '16 진수 '가'0xdead '인 경우 산술 확장은 0x0xdead가되어 상수로 해석 할 수 없습니다. 물론이 경우 산술 확장 $ (($ hex))은 트릭을 수행합니다. 독자가 선택적인 '0x'접두사를 제거하는 간단한 하위 문자열 처리 패턴 일치를 작성하는 연습으로 남아 있습니다.
awk Velor 라이브러리를 사용할 수 있습니다 .
$ velour -n 'print n_baseconv(15, 10, 16)'
F
또는:
$ velour -n 'print n_baseconv(ARGV[1], 10, 16)' 15
F