簡體   English   中英

在Android Shell中使用“ printf”獲取十六進制值

[英]Using “printf” for hex values in android shell

我正在將我的shell腳本(相當大的shell腳本)從bash移植到android shell(mksh shell)。

在Android中, printf工作方式似乎與在其他Linux系統中不同。

樣例代碼:

$ cat sample.sh 
...
func1()
{
    A=100
    HEXA=`printf "%04x" ${A}`
    echo "A - ${A} HEXA - ${HEXA}"
}

func1

該函數的輸出如下。

$ ./sample.sh
A - 100 HEXA - 300000078

它正在打印一個非常奇怪的數字。

我從其他崗位和聯機幫助頁看到mkshprintf不建議使用mksh 我的Shell腳本很大,正在大量使用它。 因此,我想以某種方式處理此問題。 我有什么選擇來處理呢?

Android中的printf鏈接到toybox

root:/ # which printf
/system/bin/printf
root:/ # ls -l /system/bin/printf
lrwxr-xr-x root     shell             2016-11-14 21:02 printf -> toybox

因此,問題出在toybox printf中。

該問題現已修復-https: //github.com/landley/toybox/issues/54

toybox修復printf很棒。

但是,如果有人想在帶有舊toybox (或完全沒有toybox )的無根設備上打印出轉換為十六進制的數字(或者,如果他們願意,可以打印幾乎所有其他合理的基數,236 )-在這里是一種怎樣用做typeset的內置mksh

baseconv(){ typeset -Ui${3:-16} -Z35 x=$1; echo ${x: -${2:-8}};}

func1()
{
    A=100
    HEXA=$(baseconv $A 4 16)
    echo "A - ${A} HEXA - ${HEXA}"
}

或僅針對printf "%04x"情況設置特定功能:

printf04x(){ typeset -Ui16 -Z7 x=$1; echo ${x: -4};}

func1()
{
    A=100
    echo "A - ${A} HEXA - $(printf04x $A)"
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM