【问题标题】:Binary to string, space every 8 digit二进制转字符串,每 8 位空格
【发布时间】:2012-01-26 19:46:12
【问题描述】:

如何使用 PHP 或 Shell 将此字符串转换为每 8 位有一个空格。从此:

0100010101110010011100100110111101110010

到这里:

01000101 01110010 01110010 01101111 01110010

【问题讨论】:

    标签: php linux shell


    【解决方案1】:

    解决这个问题的最快和最清晰的方法很可能是以下:

    <?php
     $input = "0100010101110010011100100110111101110010";
    
     $newString = chunk_split($input, 8, ' ');
     echo $newString;
    
    ?>
    

    【讨论】:

      【解决方案2】:
      <?php
      $str = "0100010101110010011100100110111101110010";
      $str = implode(' ',str_split($str,8));    
      echo $str; //output: 01000101 01110010 01110010 01101111 01110010
      
      $str = str_replace(' ','',$str); 
      echo $str; //output: 0100010101110010011100100110111101110010
      ?>
      

      【讨论】:

      • 但我需要反之亦然
      【解决方案3】:
      #!/bin/sh
      echo 0100010101110010011100100110111101110010 | sed 's/......../& /g'
      

      【讨论】:

      • @drrcknlsn - {n} 在我学习它时并不是 sed 语言的一部分,而且我从来没有机会重新学习它。无论如何,假设 OP 可以使用,您的选择会更好。
      • .{8} 工作,如果你启用扩展正则表达式(-r 在 Linux 上,-E 在 BSD 上)。
      【解决方案4】:

      从 bash 中尝试这样的事情:

      echo "0100010101110010011100100110111101110010" | sed -E "s/([0-9]{8})/\1 /g"
      

      扩展正则表达式的 -E 在 Linux (GNU sed) 上可能是别的东西。

      【讨论】:

      • 在 GNU sed 中它是 -r(尽管 -E 似乎可以在 Debian 上与 GNU sed 一起使用)。
      • @Rocket:我经常在 BSD(实际上是 OS X)和 Linux 之间切换,所以有时会很模糊。
      【解决方案5】:

      别忘了awk:

      awk '{gsub(/.{8}/,"&amp; ",$0); print}'

      测试:

      [jaypal:~/Temp] echo "0100010101110010011100100110111101110010" | 
      awk '{gsub(/.{8}/,"& ",$0); print}'
      01000101 01110010 01110010 01101111 01110010 
      

      【讨论】:

        【解决方案6】:
        $string = "0100010101110010011100100110111101110010";
        $newString = trim(implode('',array_map(function($value) { return $value.' '; }, str_split($string,8))));
        

        【讨论】:

        • 这似乎有点过于复杂了。
        • 它不如 chunk_split() 简洁高效,但证明即使在 PHP 中也有不止一种方法可以执行任何任务
        猜你喜欢
        • 1970-01-01
        • 2016-02-29
        • 2016-07-01
        • 1970-01-01
        • 2011-07-11
        • 1970-01-01
        • 2010-09-25
        • 1970-01-01
        • 2017-03-22
        相关资源
        最近更新 更多