2017-04-08 64 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

相關問題