2010-09-14 40 views
3

如何在十进制和二进制之间进行转换?我工作在Solaris 10平台上二进制和十进制之间的转换

十进制转换为二进制
4000000002 - > 100000000000000000000000000010

二进制到十进制
100000000000000000000000000010 - > 4000000002

我在UNIX使用下面的命令但需要很长时间。我有20万条记录,这样

为十进制到二进制,设置一个obase 2:

echo 'obase=2;4000000002' | bc 

对于二进制转换为十进制,设置广积到2:

echo 'ibase=2;100000000000000000000000000010' | bc 
+0

数字的范围是什么?它是否大于32位? 64位?如果不是,那么你可以编写一个C程序来完成比'bc'更通用的工作,因此可以更快。标准C printf()中没有二进制输出选项,这是一个令人讨厌的问题,但几乎不可能解决。 – 2010-09-14 06:39:17

+0

嗨32位只 – user446069 2010-09-14 06:43:20

回答

1

如果您正在运行bc每个数字将会变慢。 您是否可以不安排将数据传送到文件并一次输入?

这里有一个简单的例子,从文件中你的号码名为input.txt:

# To binary 
$ (echo 'obase=2;ibase=16;'; cat input.txt) | bc | paste input.txt - > output.txt 

# To hex 
$ (echo 'obase=16;ibase=2;'; cat input.txt) | bc | paste input.txt - > output.txt 

结果写入到文件output.txt中。

paste被包括,以产生像

07  111 
1A  11010 
20  100000 
2B  101011 
35  110101 
80  10000000 
FF  11111111 

表示输入值与输出值的制表spearated输出结果。 如果你只是想你可以省略粘贴,你可能必须设置ibase以及obase的转换是正确的结果,例如:

$ (echo 'obase=2;ibase=16;'; cat input.txt) | bc > output.txt 

注意。 gclswceap1d-mc48191-CRENG_DEV [/ home/mc48191/scratch]

+0

嗨,你可以解释我什么是FOO代表 – user446069 2010-09-14 06:41:55

+0

@ user446069 - 我已经更新了答案。有关原始文章中FOO的背景信息,请参阅http://en.wikipedia.org/wiki/Here_document - 它仅仅是一个here文档终结者。 – 2010-09-14 09:28:08