gpt4 book ai didi

android - 在 android shell 中使用 "printf"作为十六进制值

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:34:24 27 4
gpt4 key购买 nike

我正在将我的 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

它正在打印一个非常奇怪的数字。

我从其他帖子和mksh 的联机帮助页中看到,不建议在mksh 中使用printf。我的 shell 脚本非常大,正在大量使用它。所以,我想以某种方式处理这个问题。我有什么选择来处理这个问题?

最佳答案

修复 toybox 中的 printf 很棒。

但万一有人想打印出一个转换为 hex 的数字(或者几乎任何其他合理的 base236 如果他们愿意的话)在带有旧toybox(或根本没有toybox)的unroot设备上- 这是一种使用 mksh 内置的 typeset 的方法:

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)"
}

关于android - 在 android shell 中使用 "printf"作为十六进制值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40668399/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com