作者热门文章
- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
假设我有位掩码 1000000000
。我想将它转换为等效的十六进制数,即 0x200
(具体来说,我只想要 200
部分,但这很容易处理)
我知道我可以用 Python 或使用各种 bash
特性和函数来做到这一点。示例:
python -c "print format(0b1000000000, 'x')"
200
printf '%x\n' "$((2#1000000000))"
200
echo 'ibase=2;obase=10000;1000000000'|bc
200
但是,我只想使用 sh
中可用的函数(即 Shell,而不是 Bash)来执行此操作。更具体地说,我希望它与我放在一起的 initrd
镜像中的 sh
一起工作。据我所知,上面的示例都不能在 initramfs
/busybox
上下文中工作。
最佳答案
似乎 busybox sh 具有足够的功能(“子字符串”参数替换和算术评估)对此足够有用:
$ busybox sh
BusyBox v1.22.1 (Ubuntu 1:1.22.0-15ubuntu1) built-in shell (ash)
Enter 'help' for a list of built-in commands.
~ $ bitstr=1000000000
~ $ n=0
~ $ i=0
~ $ while [ $i -lt ${#bitstr} ]; do
> n=$(( 2*n + ${bitstr:$i:1} ))
> i=$((i+1))
> done
~ $ echo $n
512
~ $ printf "%x\n" $n
200
封装成一个函数:
b2h() {
local bitstr=$1 n=0 i=0
while [ $i -lt ${#bitstr} ]; do
n=$(( 2*n + ${bitstr:$i:1} ))
i=$(( i + 1 ))
done
printf "%x\n" "$n"
}
b2h 1000000000 # => 200
关于linux - 如何将位序列(位掩码)转换为相应的十六进制数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45554143/
我在 Java 中遇到异常处理问题,这是我的代码。当我尝试运行此行时出现编译器错误:throw new MojException("Bledne dane");。错误是: exception MojE
我刚刚开始学习asp.net。在你们的支持下,我希望我能从这个论坛学到更多东西。 我的问题是, 我在 asp.net 页面中有一个 TabContainer1,因为每个选项卡面板中有多个类似 (60)
我是一名优秀的程序员,十分优秀!