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가 비슷한 기능을 가지고 있다고 생각합니다.
# number conversion.
while `test $ans='y'`
do
echo "Menu"
echo "1.Decimal to Hexadecimal"
echo "2.Decimal to Octal"
echo "3.Hexadecimal to Binary"
echo "4.Octal to Binary"
echo "5.Hexadecimal to Octal"
echo "6.Octal to Hexadecimal"
echo "7.Exit"
read choice
case $choice in
1) echo "Enter the decimal no."
read n
hex=`echo "ibase=10;obase=16;$n"|bc`
echo "The hexadecimal no. is $hex"
;;
2) echo "Enter the decimal no."
read n
oct=`echo "ibase=10;obase=8;$n"|bc`
echo "The octal no. is $oct"
;;
3) echo "Enter the hexadecimal no."
read n
binary=`echo "ibase=16;obase=2;$n"|bc`
echo "The binary no. is $binary"
;;
4) echo "Enter the octal no."
read n
binary=`echo "ibase=8;obase=2;$n"|bc`
echo "The binary no. is $binary"
;;
5) echo "Enter the hexadecimal no."
read n
oct=`echo "ibase=16;obase=8;$n"|bc`
echo "The octal no. is $oct"
;;
6) echo "Enter the octal no."
read n
hex=`echo "ibase=8;obase=16;$n"|bc`
echo "The hexadecimal no. is $hex"
;;
7) exit
;;
*) echo "invalid no."
;;
esac
done
This is not a shell script, but it is the cli tool I'm using to convert numbers among bin/oct/dec/hex:
#!/usr/bin/perl
if (@ARGV < 2) {
printf("Convert numbers among bin/oct/dec/hex\n");
printf("\nUsage: base b/o/d/x num num2 ... \n");
exit;
}
for ($i=1; $i<@ARGV; $i++) {
if ($ARGV[0] eq "b") {
$num = oct("0b$ARGV[$i]");
} elsif ($ARGV[0] eq "o") {
$num = oct($ARGV[$i]);
} elsif ($ARGV[0] eq "d") {
$num = $ARGV[$i];
} elsif ($ARGV[0] eq "h") {
$num = hex($ARGV[$i]);
} else {
printf("Usage: base b/o/d/x num num2 ... \n");
exit;
}
printf("0x%x = 0d%d = 0%o = 0b%b\n", $num, $num, $num, $num);
}
xd() {
printf "hex> "
while read i
do
printf "dec $(( 0x${i} ))\n\nhex> "
done
}
dx() {
printf "dec> "
while read i
do
printf 'hex %x\n\ndec> ' $i
done
}
In my case, I stumbled upon one issue with using printf solution:
$ printf "%x" 008 bash: printf: 008: invalid octal number
The easiest way was to use solution with bc, suggested in post higher:
$ bc <<< "obase=16; 008" 8
참고URL : https://stackoverflow.com/questions/378829/convert-decimal-to-hexadecimal-in-unix-shell-script
'programing tip' 카테고리의 다른 글
Perl과 PHP의 차이점 (0) | 2020.08.17 |
---|---|
'ng build'후 angular-cli에서 dist-folder 경로를 변경하는 방법 (0) | 2020.08.17 |
Android에서 Viewpager 컨트롤러의 속도 저하 (0) | 2020.08.17 |
Swift로 현재 언어 코드를 얻는 방법은 무엇입니까? (0) | 2020.08.17 |
Return 키를 누를 때 프로그래밍 방식으로 키보드 iOS를 닫는 방법 (0) | 2020.08.17 |