【发布时间】: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