【问题标题】:How to limit the result of binary conversion to a maximum of 8-bits (255)?如何将二进制转换的结果限制为最大 8 位(255)?
【发布时间】:2020-06-08 12:41:40
【问题描述】:

如何将结果限制为仅 8 位?我必须添加两个二进制数并将结果转换为十进制。如何将总和限制为仅 8 位或 255?

def BinaryToDecimal(binaryNum):
    binaryList = []
    decimalNumber = 0

    while binaryNum != 0:
            remainder = binaryNum%10
            binaryList.append(remainder)
            binaryNum = int(binaryNum/10)

    for i in range(len(binaryList)-1,-1,-1):
        decimalNumber = decimalNumber + binaryList[i] * (2**i)

    return decimalnumber

【问题讨论】:

    标签: python 8-bit


    【解决方案1】:

    假设您想要结果的最后 8 位,简单的解决方案就是使用 modular arithmetic 并使用 % 256 得到除以 256 后的余数。

    def BinaryToDecimal(binaryNum):
        binaryList = []
        decimalNumber = 0
    
        while binaryNum != 0:
            remainder = binaryNum % 10
            binaryList.append(remainder)
            binaryNum = int(binaryNum / 10)
    
        for i in range(len(binaryList) - 1, -1, -1):
            decimalNumber = decimalNumber + binaryList[i] * (2 ** i) 
    
        return decimalNumber % 256 # You also had a typo in this line
    

    例如:

    BinaryToDecimal(11111100000000)
    Out[1]: 0
    BinaryToDecimal(11111111111111)
    Out[2]: 255
    

    或者,如果您想在答案 > 255 时返回 255,则代码为:

    return decimalNumber if decimalNumber < 256 else 255
    

    这会返回:

    BinaryToDecimal(10000000)
    Out[3]: 128
    BinaryToDecimal(100000000)
    Out[4]: 255
    BinaryToDecimal(1000000000000)
    Out[5]: 255
    

    顺便说一句:我修正了 return 语句中的一个错字,并且您的变量名称不符合 PEP-8 Python 样式 - 变量应该是小写,并用下划线分隔,例如 binary_numdecimal_number

    【讨论】:

      【解决方案2】:

      我为你写了一个函数:

      def bin_to_dec(bits,fmt = None):
          if bits != 0:
              bits = str(bits)
              if fmt == 'big':
                  bits = bits[:8]
              else:
                  bits = bits[-8:]
              try:
                  return int(bits,2)
              except ValueError:
                  print("Enter bits only no number other than 1 and 0!!!")
          return 0
      

      然后这样做:

      >>> print(bin_to_dec(11111111110000,'big'))
      255
      >>> print(bin_to_dec(11111111110000,'little'))
      240
      

      只需将您的二进制文件作为int 传递,如果您将其作为字符串,则可以从我的代码中删除bits = str(bits) 行。 fmt 用于小端或大端的数据格式取决于您。 了解小端和大端Check Here。 默认值很小,任何错误都会返回 0。

      例如,如果您在位中给出了 1 或 0 以外的任何值:

      >>> print(bin_to_dec(11111112110000,'little'))
      Enter bits only no number other than 1 and 0!!!
      0
      

      您将获得 0 和额外的打印输出

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-09-15
        • 2018-06-24
        • 2019-09-09
        • 2014-03-01
        • 1970-01-01
        • 2021-04-18
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多