在Python中,我如何解析数字字符串,如"545.2222"相应的浮点值,545.2222?或者将字符串解析为"31"整数,31?
我只是想知道如何将一个浮点数 解析str为a float,并且(单独)将一个int 解析str为一个int.
如何在python中将字符串转换为int?
这样说: 'y\xcc\xa6\xbb'
我想出了一个聪明/愚蠢的方法:
sum(ord(c) << (i * 8) for i, c in enumerate('y\xcc\xa6\xbb'[::-1]))
我知道必须有内置或标准库中的内容,这样做更简单...
这与转换可以使用int(xxx,16)的十六进制数字字符串不同,而是我想转换一串实际字节值.
更新:
我有点像詹姆斯的答案好一点,因为它不需要导入另一个模块,但Greg的方法更快:
>>> from timeit import Timer
>>> Timer('struct.unpack("<L", "y\xcc\xa6\xbb")[0]', 'import struct').timeit()
0.36242198944091797
>>> Timer("int('y\xcc\xa6\xbb'.encode('hex'), 16)").timeit()
1.1432669162750244
我的hacky方法:
>>> Timer("sum(ord(c) << (i * 8) for i, c in enumerate('y\xcc\xa6\xbb'[::-1]))").timeit()
2.8819329738616943
进一步更新:
有人在评论中询问导入另一个模块的问题是什么.好吧,导入模块不一定便宜,看看:
>>> Timer("""import struct\nstruct.unpack(">L", "y\xcc\xa6\xbb")[0]""").timeit()
0.98822188377380371
包括导入模块的成本几乎抵消了该方法的所有优点.我相信这只会包括在整个基准测试中导入一次的费用; 看看我每次强迫它重装时会发生什么:
>>> Timer("""reload(struct)\nstruct.unpack(">L", "y\xcc\xa6\xbb")[0]""", 'import struct').timeit()
68.474128007888794
毋庸置疑,如果你在每次导入时执行大量的这种方法,那么这个问题就会成比例地减少.它也可能是i/o成本而不是cpu,因此它可能取决于特定机器的容量和负载特性.
我正在使用以下课程轻松存储我的歌曲数据.
class Song:
    """The class to store the details of each song"""
    attsToStore=('Name', 'Artist', 'Album', 'Genre', 'Location')
    def __init__(self):
        for att in self.attsToStore:
            exec 'self.%s=None'%(att.lower()) in locals()
    def setDetail(self, key, val):
        if key in self.attsToStore:
            exec 'self.%s=val'%(key.lower()) in locals()
我觉得这比写出一个if/else块更具可扩展性.但是,eval似乎被认为是一种不良做法并且使用起来不安全.如果是这样,任何人都可以向我解释为什么并告诉我一个更好的方法来定义上面的类?
我有一些Perl代码,其中hex()函数将十六进制数据转换为十进制.我怎么能在Python上做到这一点?
python中是否有内置函数将二进制字符串(例如'111111111111')转换为二进制补码整数 -1?
我想将十六进制字符串(例如:)转换为十六0xAD4进制数字,然后添加0x200到该数字并再次想要以0x字符串形式打印该数字.
我尝试了第一步:
str(int(str(item[1][:-2]),16))
但是打印的值是十进制字符串而不是十六进制格式的字符串(0x格式)(我想以形式打印最终结果0x)
[:-2] 从该号码中删除最后一个00 item[1] 包含十六进制数 0x我有一个字符串,可以是前缀为"0x"的十六进制数字或没有特殊前缀的十进制数字,除了可能的减号."0x123"在基数16中," - 298"在基数10中.
如何在Python中将其转换为int或long?
我不想使用eval(),因为它不安全和过度杀伤.
我有一个像这样的十六进制字节字符串列表
['BB','A7','F6','9E'](从文本文件中读取)
如何将该列表转换为此格式?
[0xBB,0xA7,0xF6,0x9E]
我很难将十六进制更改为int/char(最好是char).通过网站; http://home2.paulschou.net/tools/xlate/我输入C0A80026的十六进制到十六进制框中,在DEC/CHAR框中它正确输出我希望它包含的IP.
这个数据是从外部数据库中提取的,我不知道它是如何被保存的,所以我必须使用的是十六进制字符串本身.
我已经尝试使用该binascii.unhexlify函数来查看我是否可以解码它但我担心我可能对十六进制没有足够的理解来欣赏我正在做的事情.
尝试仅使用int()强制转换进行打印也未产生所需的结果.我需要一些方法将该十六进制字符串(或类似的)转换为原始IP.
更新:对于将来遇到此问题的任何人,我稍微修改了以下答案,以便通过使用提供准确的打印输出作为IP;
dec_output = str(int(hex_input[0:2], 16)) + "." +  str(int(hex_input[2:4], 16)) + "." + str(int(hex_input[4:6], 16)) + "." + str(int(hex_input[6:8], 16))
我使用 pyqt5 行编辑框作为输入框。我想从输入框中获取输入并将其从字符串转换为十六进制以发送到串行捕获。例如我这样做了但没有成功:
a = hex(self.slave1.text())
b = hex(self.function1.text())
c = hex(self.address_msb1.text())
d = hex(self.address_lsb1.text())
e = hex(self.register_msb1.text())
f = hex(self.register_lsb1.text())
g = hex(self.crc_lsb1.text())
h = hex(self.crc_msb1.text())
hexConvert = [a,b,c,d,e,f,g,h]
想象:
a = "01"
b = "03"
c = "00"
d = "0A"
e = "00"
f = "04"
g = "64"
h = "0B"
我的预期输出是
[0x01, 0x03, 0x00, 0x0A, 0x04, 0x64, 0x0B]