【问题标题】:Convert int to hex and make terminal read it as hex将 int 转换为 hex 并使终端将其读取为 hex
【发布时间】:2016-04-15 21:13:18
【问题描述】:

我正在尝试将整数转换为十六进制。我找到了解决此问题的答案,例如this,尽管它们对我不起作用。我的意思是:

如果我接受这个:

buf =  ""
buf += "\xda\xc7\xd9\x74\x24\xf4\xbe\x9d\xca\x88\xfb\x5a\x29"
print buf

然后我使用 python myfile.py 从控制台运行它,然后输出是这样的:���t$���ʈ�Z),这就是我想要的(输出已被读取为十六进制)。如果我尝试这个:

var1 = 230
var2 = ""
var2 = "\\" + "x" + "%0.2X" % var1 
print var2

输出是 \xE6,控制台不会读取为十六进制。我在这里错过了什么??

【问题讨论】:

  • @JaredFields。看他的代码。是什么绊倒了你?

标签: python linux terminal


【解决方案1】:

\xda 是由 Python 解释器解释的转义序列。 \ 本身没有意义,\\ 是一个转义序列,意思是“反斜杠”。

要将自定义十六进制数字转换为文本,请参阅此问题:Convert from ASCII string encoded in Hex to plain ASCII?。以下是最简单答案的摘要:("%0.2X" % var1).decode("hex")

【讨论】:

    【解决方案2】:

    在第一个示例中,您所做的是创建一系列转义字符。所以当代码有

    buf = "\xc9"
    

    解释器实际上是将其转换为 0xc9 在 ascii 中编码的字符。

    您遇到的问题是您的代码不允许进行这些转换。您的代码要求一个字符串,该字符串只是字符 \ 然后 x 后跟某个变量的十六进制值。

    您可能正在寻找的是这样的:

    var = 230
    buf = ""
    buf += chr (var1)
    

    注意:如果您需要编码 UTF-8 值(基本上任何大于 255 的值,您可能需要使用 unichr() 而不是 chr()。

    【讨论】:

    • 很好的答案。不知道 chr()。
    • @MadPhysicist 谢谢!否则,您只需在中间的字符串之间进行一些额外的转换。
    猜你喜欢
    • 2016-03-23
    • 2019-06-04
    • 2014-04-17
    • 1970-01-01
    • 1970-01-01
    • 2016-01-22
    • 1970-01-01
    • 1970-01-01
    • 2015-12-09
    相关资源
    最近更新 更多