2017-04-08 30 views
-2

(printf“%d \ n”\'A)这段代码是打印ASCII但我用函数工作我希望函数返回ASCII我挣扎有了这个 。 请帮帮我。如何编写一个函数返回字符中没有printf的ASCII字符

+5

为什么不能用printf?这是一场狂欢。 –

+0

我必须回应上面的评论:'printf'是工作的正确工具。如果您遇到一个问题,使您认为您无法使用它,请允许我们通过详细描述来帮助您解决该问题吗? (在一个单独的问题中,因为这个问题已经有了一个答案,但是如果你问这样一个问题,并希望'@' - 在那里通知我,或者从这里的评论中链接到它,我会很高兴看一看)。 –

+0

'echo A |怎么样? tr -d“\ n”| od -An -t uC' – dawg

回答

1

您可以使用POSIX工具od

$ echo A | tr -d "\n" | od -An -t uC 
      65  

hexdump

$ echo Z | tr -d "\n" | hexdump -d | head -1 | cut -d " " -f 4 
00090 

或者你也可以通过在AZ字母循环,我想(无纠错这里...):

ord() { 
    local ordinal=65 
    for c in {A..z}; 
    do 
     if [ "$1" = "$c" ] 
     then 
      break 
     fi  
     let ordinal=ordinal+1 
    done 
    echo "$ordinal" 
} 

$ ord z 
122 

或者更多'Bashy':

ord() { 
    local ordinal=65 
    for c in {A..z}; 
    do 
     [[ "$1" == "$c" ]] && break 
     ((ordinal++)) 
    done 
    echo "$ordinal" 
} 

底线:使用printf

$ ord() { LC_CTYPE=C printf '%d\n' "'$1"; } 
ord A 
65 
+1

既然你使用'[]'而不是'[[]]',应该使用符合POSIX的'='而不是扩展名'=='。 –

+0

@CharlesDuffy:你是人类的皮棉。 ;-) – dawg

相关问题