【问题标题】:64 bits Symbolic String (Hex) to 32 bit Symbolic String64 位符号字符串(十六进制)到 32 位符号字符串
【发布时间】:2016-03-08 11:13:42
【问题描述】:

我正在尝试将 64 位符号字符串转换为 32 位。我的顾问说,那个 64 位符号字符串是一个十六进制字符串,我应该只在左 8 位之后剪掉所有位。我决定在 Python 中通过掩码来实现:

that_string & 0xFFFFFFFF

但是不将字符串转换为int()是不可能的:

int('0x'+that_string, 16) & 0xFFFFFFFF

但是'that_string' 变成了一个真正的整数,我无法将她转换回字符串。无法制作 chr(int('0x'+that_string, 16) & 0xFFFFFFFF),这会导致问题:

ValueError: chr() arg not in range(256)

由于另一个错误,也无法执行 decode():

bash ~$: (that_string).decode('hex')
...  File "<stdin>", line 1, in <module>
  File "/usr/lib/python2.7/encodings/hex_codec.py", line 42, in hex_decode
    output = binascii.a2b_hex(input)
TypeError: Odd-length string

我试图寻找其他机会,但没有得到任何合适的解决方案。

是的,我试过base64 - 图书馆,但我的顾问说,这是错误的想法,什么不是解决方案。

我很尴尬。请问你能帮帮我吗?可能,还有其他方式存在,不是吗?

【问题讨论】:

  • 你能贴出实际的十六进制字符串以便我们弄清楚格式吗?
  • 你能把你的 64 位字符串表示的值放入一个 32 位的数字吗?
  • 通过symbolic字符串,你的意思是用于symbolic execution吗?答案与您使用的特定库/框架有关,我认为请提供额外信息。但是每个符号变量应该是一个符号位数组,如果你能提取出最不重要的符号位,你就完成了!
  • 感谢您的回复!在这种情况下,符号字符串是指任意长度的随机非数字字符串:例如,它可以是 '401759ea2' - 它是 64 位字符串,它是 不是数字,所以它不是 0x 中的 17204354722而这里的 'a' 不代表 0x 中的 10。

标签: python string 64-bit 32-bit


【解决方案1】:

用切片取最右边的 8 位数字:

str[-8:]

其中str 是一个字符串,其中包含输入数据的十六进制表示。

如果str 少于 8 位,那么它们都将被这个表达式返回,这就是你想要的。

例如:

>>> str = '0123456789abcdef'
>>> str[-8:]
'89abcdef'
>>> str = 'abcd'
>>> str[-8:]
'abcd'

【讨论】:

  • 不幸的是,不-害怕,你的想法错了:你说的是简单的符号字符串,但它完全错了。真正的想法如下:有一个字符串that_string,用hex编码。所以我有类似that_string = hex(original_string) 的东西,但that_string 不是 一个数字。而original_string 是未知的,需要找到。希望,这是更清楚的解释,不是吗?例如,stackoverflow.com/questions/209513/… 但麻烦的是那些 digits 的例子,但我的字符串是 symbolic hex
  • 我刚刚使用文本操作而不是按位操作实现了您的问题。如果我说的不是您所需要的,那么您的问题是错误的。也许你可以把问题说得更清楚。
  • 也许,你的答案也应该注意,如果str 有你所说的“少于8 位”或符号,即len(str)&lt;=8,其中str 是一个列表(str=[]),它并不意味着str bits,即size_of(str)。但是问题中没有数字或其他符号,而是提到了 第 8 位
  • 我不认为你真的了解这些。 that_string 是我理解的字符串。你知道切片是什么吗?
  • 尊敬的 Heffernan 先生,我非常感谢您的尝试!但看起来,要么你没有读过我以前的 cmets,要么你试图回答另一个问题;为什么要在这里切片?!正如问题中所说,that_stringhex。所以你在你的回答中写道:str = '0123456789abcdef' str[-8:] = '89abcdef' 其中strthat_stringstr[-8:] 是你的解决方案,即original_string。那么有条件的str == hex(str[-8:]) AND str == '0123456789abcdef'(同时是64位)和str[-8:]应该是32位的。你认为'89abcdef' 可能是一个解决方案吗?
猜你喜欢
  • 2014-10-19
  • 2023-04-11
  • 1970-01-01
  • 1970-01-01
  • 2010-09-21
  • 2011-01-17
  • 2013-09-06
  • 1970-01-01
  • 2014-03-07
相关资源
最近更新 更多