printf를 사용하여 BASH의 문자에 대한 정수 ASCII 값
가치있는 성격의 작품 :
$ printf "%d\n" \'A
65
$
두 가지 질문이 있습니다. 첫 번째 질문이 가장 중요합니다.
- 65를 어떻게 A로 바꾸나요?
- \ 'A는 printf를 사용하여 ASCII 문자를 그 값으로 변환합니다. 구문 이 printf에 고유 합니까 아니면 BASH의 다른 곳에서 사용됩니까? (이러한 작은 문자열은 Google에서 찾기 어렵습니다.)
한 줄
printf "\x$(printf %x 65)"
두 줄
set $(printf %x 65)
printf "\x$1"
사용하는 데 신경 쓰지 않는다면 여기에 awk
awk 'BEGIN{printf "%c", 65}'
이것은 작동합니다 (8 진수 값으로) :
$ printf '%b' '\101'
A
심지어 (일부 : 7 개를 넘지 마십시오) 시퀀스 :
$ printf '%b' '\'{101..107}
ABCDEFG
모든 범위에서 (십진수) 값을 허용하는 일반적인 구조는 다음과 같습니다.
$ printf '%b' $(printf '\\%03o' {65..122})
ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz
또는 문자의 16 진수 값을 사용할 수 있습니다.
$ printf '%b' $(printf '\\x%x' {65..122})
ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz
xxd (16 진수 값 사용)를 사용하여 문자를 다시 가져올 수도 있습니다.
$ echo "41" | xxd -p -r
A
즉, 한 작업은 다른 작업의 반대입니다.
$ printf "%x" "'A" | xxd -p -r
A
또한 한 번에 여러 16 진수 값으로 작동합니다.
$ echo "41 42 43 44 45 46 47 48 49 4a" | xxd -p -r
ABCDEFGHIJ
또는 시퀀스 (여기에서는 16 진수 값을 얻기 위해 printf가 사용됨) :
$ printf '%x' {65..90} | xxd -r -p
ABCDEFGHIJKLMNOPQRSTUVWXYZ
또는 awk를 사용하십시오.
$ echo 65 | awk '{printf("%c",$1)}'
A
시퀀스의 경우에도 :
$ seq 65 90 | awk '{printf("%c",$1)}'
ABCDEFGHIJKLMNOPQRSTUVWXYZ
이런 종류의 변환에는 perl을 사용합니다.
perl -e 'printf "%c\n", 65;'
한 가지 옵션은 16 진수 또는 8 진수 표기법을 사용하여 관심있는 문자를 직접 입력하는 것입니다.
printf "\x41\n"
printf "\101\n"
두 번째 질문의 경우 선행 따옴표 구문 ( \'A)이 다음과 관련된 것 printf같습니다.
선행 문자가 작은 따옴표 또는 큰 따옴표 인 경우 값은 작은 따옴표 또는 큰 따옴표 다음에 오는 문자의 기본 코드 집합에있는 숫자 값이어야합니다.
에서 http://pubs.opengroup.org/onlinepubs/009695399/utilities/printf.html
문자의 ASCII 값을 저장하려면 : (BASH에서이 작업을 수행했고 작동했습니다)
{
char="A"
testing=$( printf "%d" "'${char}" )
echo $testing}
출력 : 65
6516 진수 로 변환하면 다음과 0x41같습니다.
$ echo -e "\x41" A
다음은 65를 A로 변환하는 또 다른 방법입니다 (8 진수를 통해).
help printf # in Bash
man bash | less -Ip '^[[:blank:]]*printf'
printf "%d\n" '"A'
printf "%d\n" "'A"
printf '%b\n' "$(printf '\%03o' 65)"
To search in man bash for \' use (though futile in this case):
man bash | less -Ip "\\\'" # press <n> to go through the matches
For capital letters:
i=67
letters=({A..Z})
echo "${letters[$i-65]}"
Output:
C
참고URL : https://stackoverflow.com/questions/890262/integer-ascii-value-to-character-in-bash-using-printf
'IT TIP' 카테고리의 다른 글
| data.table 열에서 텍스트 문자열 분할 (0) | 2020.10.29 |
|---|---|
| Java에서 값으로 날짜 객체를 만드는 방법 (0) | 2020.10.29 |
| 실행 파일이 유효하지 않은 권한으로 서명되었습니다. (0) | 2020.10.29 |
| ASP.NET 라우팅을 사용하여 정적 파일 제공 (0) | 2020.10.29 |
| 명시 적 인스턴스화-언제 사용됩니까? (0) | 2020.10.29 |