【问题标题】:Python 3 - Convert 2-digit Integers to and from 2 character Hex EquivalentPython 3 - 将 2 位整数与 2 字符十六进制等效转换
【发布时间】:2020-01-13 16:00:33
【问题描述】:

我对此进行了研究,虽然我可以找到一些方法将由 3 位整数组成的字符串转换为由 2 位十六进制等效值组成的字符串,但我没有找到将 2 位数字转换为的方法-十六进制字符串变回原来的 3 位整数。

例如,我想将“015”转换为相当于 2 位十六进制的“0F”,反之亦然。

另一个例子:“123”到“7B”和“7B”到“123”。

我更喜欢这两种转换的单独方法,而不是一个函数可以接受任何一种类型的字符串并返回另一种。

# Method I'm currently using to convert int to hex:
myHex = str(format(int(myNumber), '02x'))
print("Integer " + myNumber + " converted to " + myHex)

非常感谢您的帮助。

【问题讨论】:

  • 您具体在哪个部分苦苦挣扎?

标签: python integer hex byte


【解决方案1】:

您可以使用以下功能:

def two_digit_hex_to_three_digit_integer(hex):
    return str(int(hex, 16)).zfill(3)

说明:

int(hex, 16) 会将您的两位十六进制数转换为以 10 为底的 int。然后,这将转换为 str,并将填充最多 3 个零以满足您所说的三个条件-数字整数。

用法:

>>> two_digit_hex_to_three_digit_integer('7B')
'123'
>>> two_digit_hex_to_three_digit_integer('0F')
'015'

【讨论】:

  • int 不需要0x 前缀; int("7B", 16) == 123.
  • @jonrsharpe,谢谢,我不知道,我刚刚更新了我的答案。
  • 这很好用。 zfill 部分在我想转换为 2 位整数而不是 3 位整数时特别有用。谢谢!
【解决方案2】:

你可以使用:

1) 内置十六进制方法

hex(int('123')) --> '0x7b'
str(int('0x7b', 16)) --> '123'

如果你不想要'0x'部分:

hex(int('123'))[2:] --> '7b'
str(int('7b', 16)) --> '123'

或:

2) 使用 fstring

def str_to_hex(my_str_num):
    return f'{int(my_str_num):02x}'

def hex_to_str(my_hex):
    return f'{int(my_hex, 16):>03}'

print(str_to_hex('015'))
print(hex_to_str('0f'))

print(str_to_hex('123'))
print(hex_to_str('7b'))

输出:

0f
015

7b
123

【讨论】:

  • 关于删除“0x”的部分真的很有帮助。阅读您的建议后,我可能会重新使用 hex() 而不是 format()。
【解决方案3】:

对于base-10base-16 的转换,您可以利用str 格式化以下方式:

def convert_dec_to_hex(value):
    return "%X" % int(value)
print(convert_dec_to_hex("123")) # 7B

大写X 给出ABCDEF,小写x 给出abcdef 所以

def convert_dec_to_hex(value):
    return "%X" % int(value)
print(convert_dec_to_hex("123")) # 7b

【讨论】:

  • 有趣的技术。感谢您澄清使用大写和小写的区别。你将如何处理将十六进制转换回十进制?
  • @gnorman:到目前为止,我知道没有字符串格式接受十六进制数字并给出十进制数字。在这种情况下,我建议使用int 和第二个参数16,如其他答案所示。作为旁注,int 接受从236 的任何数字作为base(第二个参数),因此您也可以使用它来读取以该范围内的任何基数写入的数字。
猜你喜欢
  • 2018-08-09
  • 2017-03-08
  • 2016-12-18
  • 1970-01-01
  • 2021-09-08
  • 2013-05-20
  • 1970-01-01
  • 2022-01-13
  • 2015-11-29
相关资源
最近更新 更多