【问题标题】:Ruby: convert integer to 32 bit binary number (or string)Ruby:将整数转换为 32 位二进制数(或字符串)
【发布时间】:2018-12-11 21:34:43
【问题描述】:

我想将一个数字(例如 1)转换为 32 位二进制数:

00000000000000000000000000000001  

我怎样才能确保完整的字符串长度为32,不管数字有多小?

我有一个 sprintf8 位二进制工作,但不知道如何使其成为 32

【问题讨论】:

    标签: ruby binary integer


    【解决方案1】:

    String#%(通过sprintf):

    '%032b' % 7
    => "00000000000000000000000000000111"
    

    【讨论】:

      【解决方案2】:

      使用String#rjust:

      1.to_s(2).rjust(32, '0')
      #⇒ "00000000000000000000000000000001"
      

      【讨论】:

        【解决方案3】:

        使用packunpack1

        [1].pack('L>').unpack1('B*')
        #=> "00000000000000000000000000000001"
        

        L 表示 32 位无符号整数,> 表示大端。 B 表示位串,* 输出所有可用位。

        这将在超过 32 位无符号整数范围时回绕:

        [4_294_967_294].pack('L>').unpack1('B*') #=> "11111111111111111111111111111110"
        [4_294_967_295].pack('L>').unpack1('B*') #=> "11111111111111111111111111111111"
        [4_294_967_296].pack('L>').unpack1('B*') #=> "00000000000000000000000000000000"
        [4_294_967_297].pack('L>').unpack1('B*') #=> "00000000000000000000000000000001"
        

        【讨论】:

          猜你喜欢
          • 2017-08-18
          • 2019-03-14
          • 2022-01-13
          • 1970-01-01
          • 2012-02-27
          • 1970-01-01
          • 2017-04-25
          • 1970-01-01
          相关资源
          最近更新 更多