在Linux中使用printf
函数将十进制数转换为十六进制数或十进制数非常容易,分别使用%x
和%o
说明符。
user@linux:~$ file /usr/bin/printf
/usr/bin/printf: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 3.2.0
user@linux:~$
user@linux:~$ printf "Dec to Hex = %x\n" 255
Dec to Hex = ff
user@linux:~$
user@linux:~$ printf "Dec to Oct = %o\n" 255
Dec to Oct = 377
user@linux:~$
字符串
我试图将类似的十进制数转换为二进制数,但它不工作
user@linux:~$ printf "Dec to Bin = %b\n" 255
Dec to Bin = 255
user@linux:~$
型
可以在Linux中使用printf
函数将Dec转换为Bin吗?
Linux printf
还可以做什么(数字转换)?
十六进制到十进制?十六进制到八进制?十六进制到二进制?
3条答案
按热度按时间7gs2gvoe1#
无法使用printf。可以使用dc。
字符串
1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111
5sxhfpxr2#
可以在Linux中使用printf函数将Dec转换为Bin吗?
不,C
printf
没有用于二进制格式化的格式修饰符(http://www.cplusplus.com/reference/cstdio/printf/),而Linux实用程序printf
也没有用它来扩展它(%b
是 “expand backslash escape sequences in the corresponding argument”)。printf
工具可能仍然会被您的特定shell所掩盖,这可能最终会添加更多的格式化程序,然后你必须检查你的shell的手册(例如bash does extend it somewhat,但仍然没有“二进制”格式化程序)。用Linux printf还能做什么(数字转换)?
十六进制到十进制?十六进制到八进制?十六进制到二进制?
它应该支持常见的C格式输入(即
0xN
用于十六进制输入,0N
用于八进制输入),例如:字符串
所以,是的,你基本上可以转换十进制/十六进制/八进制到十进制/十六进制/八进制,任何组合,通过使用所需的输入格式和输出格式。
你实际上想错了,它是单独的输入到二进制转换,二进制到输出,即当你把“16”作为printf的参数值时,它作为字符串传递给工具,然后它将通过值解析器解析字符串,检测“16”是十进制格式,将其转换为本地整数值16(即CPU内部的二进制),然后它将最终根据格式字符串中的格式说明符将其转换回字符串,即“%#x”将产生该内部(二进制)整数值(“0x 10”)的十六进制格式。
如果你想要“二进制”输出来检查值,经验丰富的汇编程序员不会为此烦恼,他们学会了读取每一个单独的位的十六进制,因为在十六进制中,每个数字都是由4位组成的(0000 = 0x0,0001 = 0x1,.,1110 = 0xE,1111 = 0xF),因此,通过使用十六进制格式,您可以很容易地读取您感兴趣的任何特定位。而真正的二进制输出则通过显示直接使用0/1,但是对于32和64位值,它有点太长了,并且很难保持位置意识,这部分在十六进制中稍微简单一些(因为每两位数是8位=一个字节)。
ogq8wdun3#
Perl可以很好地将信息学中使用的所有数字格式相互转换。我自己编写了一个shell脚本,这是它最基本的形式:
字符串
它基于两个参数来形成一个字符串,然后由Perl解释器执行。
第一个参数为目标数字格式,
例如
第二个参数是要转换的数字
你必须用它的前缀来写,例如。
*0o77
*0x3f
*0b111111
*63(十进制数除外)
型
负数也有效
如果您想查看
型