【问题标题】:Project Converting Hex to Base64将十六进制转换为 Base64 的项目
【发布时间】:2017-01-20 17:41:57
【问题描述】:

这是一个家庭作业,所以如果你不想帮忙,我理解。但是,我不是在寻找算法,而是在寻找 Python 的帮助。我很擅长 C++,但是这个学期我的一些课程使用的是 Python,所以我想练习一下。

这是我迄今为止所做的工作......它可以工作,但我想在程序中添加一些检查,例如检查以确保初始输入为十六进制格式。

将字符串转换为列表并从那里检查是否有效?

感谢您的帮助,

import binascii #used to convert from hexadecimal to binary
import base64   #used to convert from binary to base64


"""
get hexadecimal value
convert to binary
convert to base64
"""

#conversions
hexa = input("Enter a hexadecimal value: ")
bina = binascii.unhexlify(hexa)
Base64 = base64.b64encode(bina)

#print
print(Base64)

#exit program
input("Exit...")

【问题讨论】:

  • 当前无效输入会发生什么?
  • 程序刚刚结束。命令提示符关闭而不继续运行。
  • 您可能希望从命令行 (python myprogram.py) 而不是从 GUI 启动程序,这样您就可以读取程序的输出。 stackoverflow.com/questions/12375173/…
  • 哦,我明白了...谢谢。这很有帮助。以前,我不知道出了什么问题!

标签: python python-3.x


【解决方案1】:

两件事:

  1. 如果输入包含错误,unhexlify 将引发异常。您可以捕获此异常,例如继续循环。

    >>> try:
    ...     binascii.unhexlify('tsst')
    ... except binascii.Error as e:
    ...     print(f'Invalid input ({e}). Please try again:', file=sys.stderr)
    ...
    Invalid input (Non-hexadecimal digit found). Please try again:
    
  2. 您可以遍历字符串的字符,因此无需将其转换为列表。

    >>> import string
    >>> all(c in string.hexdigits for c in 'cafebabe')
    True
    

【讨论】:

  • 值得注意的是,第一个示例需要新的 (3.6) fstrings。
  • 如果 unhexlify 失败并抛出异常,是否意味着它不是十六进制形式?
  • 真的没有办法轻松更改字符串的内容吗?你可以删除它并重新初始化它吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-07
  • 2018-03-01
  • 2022-01-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多