首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在android shell中对十六进制值使用"printf“

在android shell中对十六进制值使用"printf“
EN

Stack Overflow用户
提问于 2016-11-18 02:24:12
回答 2查看 744关注 0票数 1

我正在将shell脚本(相当大的shell脚本)从bash移植到android (mksh )。

在安卓系统中,printf的工作方式似乎与其他Linux系统不同。

样本代码:

代码语言:javascript
复制
$ cat sample.sh 
...
func1()
{
    A=100
    HEXA=`printf "%04x" ${A}`
    echo "A - ${A} HEXA - ${HEXA}"
}

func1

此函数的输出如下。

代码语言:javascript
复制
$ ./sample.sh
A - 100 HEXA - 300000078

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

我从其他帖子和mksh的手册中看到,不推荐在mksh中使用printf。我的shell脚本非常大,正在大量使用它。所以,我想以某种方式处理这件事。我有什么选择来处理这件事?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-11-19 13:49:39

printf中修复toybox是很棒的。

但是,如果有人想在一个没有根的设备上打印一个转换成十六进制的数字(如果他们愿意的话,也可以打印出一个转换成十六进制的数字(或者几乎任何其他合理的基础,从236 )),那么使用旧的toybox (或者根本没有toybox )--以下是使用typeset内置的mksh的一种方法。

代码语言:javascript
复制
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"的情况创建一个特定的函数:

代码语言:javascript
复制
printf04x(){ typeset -Ui16 -Z7 x=$1; echo ${x: -4};}

func1()
{
    A=100
    echo "A - ${A} HEXA - $(printf04x $A)"
}
票数 2
EN

Stack Overflow用户

发布于 2016-11-19 02:11:47

Android中的printf正在链接到玩具盒。

代码语言:javascript
复制
root:/ # which printf
/system/bin/printf
root:/ # ls -l /system/bin/printf
lrwxr-xr-x root     shell             2016-11-14 21:02 printf -> toybox

所以问题就出现在了玩具盒的版面上。

现在问题已经解决了- https://github.com/landley/toybox/issues/54

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40668399

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档