【问题标题】:Scala: How do I extract the first secound third and fourth byte from an integer using bit operators to binary and back?Scala:如何使用位运算符从整数中提取第一个第二个第三个和第四个字节到二进制并返回?
【发布时间】:2017-04-03 11:38:10
【问题描述】:

例如

-1234567890 = 10110110 01101001 11111101 00101110

10110110 = 182

01101001 = 105

11111101 = 253

00101110 = 46

我不明白这应该如何工作。提前致谢!

【问题讨论】:

    标签: scala binary integer bit-manipulation


    【解决方案1】:

    这可以像使用任何其他语言一样通过位移位完成:

    scala> val x = -1234567890
    x: Int = -1234567890
    
    scala> x & 0xFF
    res0: Int = 46
    
    scala> (x >> 8) & 0xFF
    res1: Int = 253
    
    scala> (x >> 16) & 0xFF
    res2: Int = 105
    
    scala> (x >> 24) & 0xFF
    res3: Int = 182
    

    基本上,您将值向右移动所需的字节数,然后应用掩码以仅保留最后一个字节:

    0x000000FF == 0b00000000000000000000000011111111
    

    【讨论】:

      【解决方案2】:
      scala> :pa
      // Entering paste mode (ctrl-D to finish)
      
      def getBinaryString(i: Int) = {
        val bs = i.toBinaryString
        val bs32 = if (bs.length == 32) bs else ("0" * (32 - bs.length)) + bs
        bs32
      }
      
      // Exiting paste mode, now interpreting.
      
      getBinaryString: (i: Int)String
      
      scala> val i = -1234567890
      i: Int = -1234567890
      
      scala> val bs = getBinaryString(i)
      bs: String = 10110110011010011111110100101110
      
      scala> val first8 = bs.substring(0, 8)
      first8: String = 10110110
      
      scala> val first8Int = Integer.parseInt(first8, 2)
      first8Int: Int = 182
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-06-08
        • 2015-06-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多