【问题标题】:How do you use Binary conversion in Python/Bash/AWK?如何在 Python/Bash/AWK 中使用二进制转换?
【发布时间】:2010-10-19 21:20:21
【问题描述】:

我是二进制转换的新手。 我每天都使用 Python、Bash 和 AWK。

我希望看到二进制转换在这些语言中的应用。 例如,我对您在工作中通过它解决的问题感兴趣。

您在 Python/Bash/AWK 中的哪些地方使用二进制转换?

我想看看代码示例。

【问题讨论】:

  • 我不确定我是否理解您的问题。你说的是哪种二进制转换?
  • 二进制转换什么数据?为什么?
  • @S.Lott:Topcoder 的一位获奖者说他每天都使用二进制转换和算法。
  • @Brian:我的意思是将 Dec 数转换为二进制数。
  • @NewbieQuestions 听起来像是一个错误的引用,“二进制转换”与算法几乎没有关系。你可能想追查他/她实际上说了什么。或者请说它的人澄清它的意思。

标签: python bash binary awk


【解决方案1】:

在命令行上使用 Python 将二进制数字字符串转换为数字:

binary=00001111
DECIMAL=$(python -c "print int('$BINARY', 2)")
echo $decimal

请参阅int function 的文档。

哦,等等,我误读了这个问题,你想知道转换为二进制会得到什么。好吧,这取决于“转换为二进制”的含义。假设我想存储一个包含一百万个整数的文件。整数将介于 0 和 32,000 之间。如果我将它们存储为文本,则每个数字最多需要两个字节(一位数字和一个分隔符),最坏的情况是六个字节(五位数字和一个分隔符),每个数字的平均大小为 4.6 个字节(请参阅数学评论)。我也没有简单的方法来选择第 15 个数字。如果我将它们存储为 16 位整数(二进制),每个数字将占用两个字节,我可以通过 seek'ing 找到第 15 个数字以抵消 2*(15-1) 并读取两个字节。此外,当我对基于文本的版本进行数学运算时,我(或我的语言)必须首先将字符串转换为数字,而二进制版本已经是 16 位数字。

所以,简而言之,你使用二进制类型来

  1. 节省空间
  2. 记录大小一致
  3. 加速程序

【讨论】:

  • @Owens:你每天都用二进制转换吗?
  • 再次,这取决于您所说的“二进制转换”是什么意思。由于上述原因,在某些工作中,许多数据文件是二进制文件。
  • 您有 10 个 1 位数字、90 个 2 位数字、900 个 3 位数字、9000 个 4 位数字和 23000 个 5 位数字,因此您的“平均值”实际上是 4.6
【解决方案2】:

在 shell 中,dc 的一个很好的用法:

echo 2i 00001111 pq | dc

2i 表示:输入数字的基数是 2

pq 表示:打印并退出

另一种方式是:

echo 2o 15 pq | dc

我不记得在现实世界中使用过这个功能。

【讨论】:

  • @mouviciel:Topcoder 比赛的一位获胜者对我说,他必须每天使用算法进行二进制转换。这是真的吗?
  • 也许对他来说......我需要在二进制文件之间进行转换的罕见情况是我在靠近硬件的地方编写代码。
  • 没有必要使用 echo 和管道,保存一个进程并使用 dc -e '2i 00001111 pq'。
【解决方案3】:

在较新版本的 Python 中存在 bin() 函数,我相信它接受一个 int 并返回一个二进制文字,形式为 0b011010 或其他形式。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-08-09
    • 1970-01-01
    • 1970-01-01
    • 2012-06-22
    • 2020-09-18
    • 2015-03-06
    • 2022-09-25
    • 2017-01-24
    相关资源
    最近更新 更多