获取字符的数字 ASCII 值

Hos*_*ost 11 scripting text-processing od

我正在尝试编写一个 shell 脚本,它要求在 AZ 或 az 范围内输入一个 ASCII 字符并返回其等效的数值。例如,输出可能如下所示:

scarlet$ Please type a character between A and Z or between a and z:
scarlet$ A       
scarlet$ The decimal value of A is: 65 
Run Code Online (Sandbox Code Playgroud)

我的尝试:

#!/bin/bash
echo Enter a letter:
read A
echo -n ${A} | od -i | head -1 | cut -b 10- | tr -d " "
Run Code Online (Sandbox Code Playgroud)

Gil*_*il' 8

POSIX: printf a | od -A n -t d1

珀尔: perl -e 'print ord($ARGV[0])' a

Perl,如果在 UTF-8 语言环境中处理 UTF-8: perl -C255 -e 'print ord($ARGV[0])' œ


Lri*_*Lri 8

POSIX:

$ printf %d\\n \'a
97
Run Code Online (Sandbox Code Playgroud)

它也适用于 bash 4.0 及更高版本和 zsh 中的非 ASCII 字符:

$ printf %x\\n \'?
3042
Run Code Online (Sandbox Code Playgroud)

您还可以使用recode ..dump查看十六进制代码点:

$ printf a?|recode ..dump
UCS2   Mne   Description

0061   a     latin small letter a
3042   a5    hiragana letter a
Run Code Online (Sandbox Code Playgroud)

  • 为了让它不那么“晦涩”,还可以使用例如 `A=a ; printf '%d\n' "'$A'"` 和在 ksh 上类似 `A=a; 整数 N=$(("'$A'")); 打印 $N`(不需要打印或 printf)。 (2认同)

Mik*_*kel 0

od -t d1如果你有的话试试吧。其他输出格式很奇怪。

您也不需要头部和切口,例如:

printf "A" | od -t d1 | read addr num && echo $num
Run Code Online (Sandbox Code Playgroud)