Python 2.7读取Hex和Dec作为Str然后添加它们

时间:2013-07-29 21:36:44

标签: python

今天我正在阅读一个文件,并提取信息。我已经弄清楚了所有的东西,但由于某种原因,我有一个非常非常讨厌的问题!我读了一整行并使用.split()命令将'句子'分解为'单词'吧?然后我将“单词”别名:

startAddress = line[ 0 ]
length = line[ 2 ].strip( "(" ).strip( ")" )
...
endAddress = startAddress + length

注意:我删除了长度,因为在数据文件中它被()封装,以后,当我将其加载到.csv文件中时会导致问题,因为()被用作底片。

无论如何,如果我将0x00230008作为起始地址并且(4)是长度,我的程序使0x002300084成为结束地址而不是0x00230008C,但是如果我做hex(长度)或hex(startAddress)甚至是十六进制(str(长度)或十六进制(str(startAddress))它会抛出一个错误,说十六进制数不能转换为十六进制。同样,我也不能将它们转换为整数。

真的,我需要做的就是添加起始地址(以十六进制,但以字符串形式读入)和长度(在int中并以int形式读入。)我试过转换它们,但那没用。我也试过了这行

endAddress = startAddress + length - 1

告诉我“不支持的操作数类型 - :'str'和'int'”所以,我尽可能多地玩弄它,但我只是想不出来。我想通过strip删除十六进制值前面的0x,但是它以整数读取并且不正确。

我尝试的最后一件事是使用line [0]和line [2](带条)直接找到endAddress,但它给出了所有相同的错误。我尝试通过声明startAddress = 0xFFFFFFFF强制类型,然后我将它指定为等于行[0],但这不起作用。那么,如果它不抱怨它是十六进制的,那么如何将字符串转换为十六进制数字呢?或许我添加它们的方法是错误的?我可以使用其他一些添加方法吗?

对我来说最大的困惑是,如果我尝试将startAddress转换为字符串,然后再转换为十六进制数字,它仍会抱怨。

4 个答案:

答案 0 :(得分:2)

int接受一个可选参数,指定要将其转换为的整数基数。所以你可以简单地调用类似的东西:

proper_int = int(number, 16)

要获得正确的陈述。

例如:

int("10", 16) = 16
int("F0", 16) = 240
int("0x10", 16) = 16

如果您想添加零填充,我建议zfill

"10".zfill(4) = "0010"

答案 1 :(得分:1)

int()默认为base-10,因此在base-16字符串上调用int时指定基数:

>>> int('0x00230008', 16)
2293768

答案 2 :(得分:1)

您必须将字符串解析为base-16 int

>>> int("0x00230008", 16)
2293768

添加商标

>>> int("0x00230008", 16) + 4
2293772

并将其转换回十六进制字符串:

>>> hex(int("0x00230008", 16) + 4)
'0x23000c'

如果需要,你必须使用一些字符串格式而不是hex用零填充它:

>>> '0x%08x' % (int("0x00230008", 16) + 4)
'0x0023000c'

答案 3 :(得分:0)

使用inteval功能:

>>> int('0x002300084', 16)
36700292
>>> eval('0x002300084')
36700292
>>> hex(36700292)
'0x2300084'

hexoctbin函数都采用整数并返回字符串
while int接受字符串(或unicode)和可选的基本参数(默认为10)并返回整数