[unix] UNIX 쉘 스크립트에서 10 진수를 16 진수로 변환

UNIX 쉘 스크립트에서 10 진수를 16 진수로 변환하기 위해 무엇을 사용할 수 있습니까? 나는 od가 트릭을 할 것이라고 생각했지만 ASCII 숫자 표현을 제공하고 있다는 것을 깨닫지 못합니다.

printf? 심한! 지금은 사용하고 있지만 다른 것은 무엇입니까?



답변

echo "obase=16; 34" | bc

정수 파일 전체를 한 줄에 하나씩 필터링하려면 :

( echo "obase=16" ; cat file_of_integers ) | bc


답변

시도 printf(1)했습니까?

printf "%x\n" 34
22

모든 셸에 내장 함수를 사용하는 방법이있을 수 있지만 이식성이 떨어집니다. POSIX sh 사양을 확인하여 이러한 기능이 있는지 확인하지 않았습니다.


답변

16 진수에서 10 진수로 :

$ echo $((0xfee10000))
4276158464

10 진수에서 16 진수로 :

$ printf '%x\n' 26
1a


답변

bash-4.2$ printf '%x\n' 4294967295
ffffffff

bash-4.2$ printf -v hex '%x' 4294967295
bash-4.2$ echo $hex
ffffffff


답변

미안해, 이거 해봐 …

#!/bin/bash
:

declare -r HEX_DIGITS="0123456789ABCDEF"

dec_value=$1
hex_value=""

until [ $dec_value == 0 ]; do

    rem_value=$((dec_value % 16))
    dec_value=$((dec_value / 16))

    hex_digit=${HEX_DIGITS:$rem_value:1}

    hex_value="${hex_digit}${hex_value}"

done

echo -e "${hex_value}"

예:

$ ./dtoh 1024
400


답변

시험:

printf "%X\n" ${MY_NUMBER}


답변

에서 zsh당신이 이런 종류의 작업을 수행 할 수 있습니다 :

% typeset -i 16 y
% print $(( [#8] x = 32, y = 32 ))
8#40
% print $x $y
8#40 16#20
% setopt c_bases
% print $y
0x20

zsh산술 평가에 대한 문서 페이지 에서 가져온 예 입니다.

나는 Bash가 비슷한 기능을 가지고 있다고 생각합니다.