it-swarm-korea.com

UNIX 쉘 스크립트에서 ASCII 코드를 16 진수로 변환

ASCII 코드 (예 : - 또는 _ 또는 . 등)을 Unix 셸의 16 진수 표현으로 (bc 명령없이) 예 : - => %2d.

어떤 아이디어?

7
Olivier DUVAL

C 함수를 시뮬레이션하는 printf 도구가 있습니다. 일반적으로 /usr/bin/printf,하지만 많은 셸이이를위한 내장 기능도 구현합니다. 당신이 사용할 수있는 %02x 문자의 16 진 표현을 얻으려면 작은 따옴표로 된 문자를 포함하는 문자열을 전달해야합니다 (Edit : 시작 부분에 작은 따옴표 만 나타납니다. 충분하다):

printf "%%%02x\n" "'-"   # Outputs %2d

편의를 위해 Shell 함수를 만들 수 있습니다.

function hex() {
    printf "%%%02x\n" "'$1"
}

hex -   # Outputs %2d
hex _   # Outputs %5f
hex .   # Outputs %2e
13
Michael Mrozek

od 시도 :

$ echo -n "-_." | od -A n -t x1

2d 5f 2e

-A n는 오프셋을 인쇄하지 않음을 의미하고 -t x1는 입력 유형이 1 바이트의 16 진 정수임을 의미합니다.

4
Cristian Ciupitu

xxdvim-common 패키지의 일부로 제공되는 16 진 덤프 유틸리티입니다.
연속적인 '일반/포스트 스크립트'hexdump 스타일을 출력하는 편리한 -p 옵션이 있습니다.이 옵션은 -r ... -u를 통해 쉽게 되돌릴 수 있습니다. 대문자 16 진수를 출력합니다.

$ echo -n "M" |xxd -p    # 1 ASCII char= 1 UTF-8 byte; Unicode Codepoint: U+0041
4d

$ echo -n "〶" |xxd -p -u # 1 CJK char= 3 UTF-8 bytes; Unicode Codepoint: U+3036  
E380B6

$ echo -n "Dump a string" |xxd -p -u  
44756D70206120737472696E67

$ echo -n "Dump and Revert" |xxd -p |xxd -r  
Dump and Revert
2
Peter.O