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

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

Unix 쉘에서 (명령 없이 ) ASCII 코드(예: -또는 _등 )를 16진수 표현으로 변환하고 싶습니다 (예: => )..bc-%2d

어떤 아이디어가 있나요?

답변1

printfC 함수를 시뮬레이션하는 도구 가 일반적으로 존재 /usr/bin/printf하지만 많은 쉘에서도 이에 대한 내장 기능을 구현합니다. 이를 사용하여 %02x문자의 16진수 표현을 얻을 수 있지만 전달하는 문자열에 작은따옴표(편집하다:처음에 작은 따옴표를 추가하는 것만으로도 충분하다는 것이 밝혀졌습니다.):

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

편의를 위해 다음과 같이 셸 함수를 만들 수 있습니다.

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

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

답변2

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

$ 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

답변3

노력하다OD:

$ echo -n "-_." | od -A n -t x1
2d 5f 2e

-A n오프셋을 인쇄하지 않음을 나타냅니다. -t x1이는 출력을 1바이트 16진수 정수로 형식화함을 의미합니다.

관련 정보