今天我正在阅读一个文件,并提取信息。我已经弄清楚了所有的东西,但由于某种原因,我有一个非常非常讨厌的问题!我读了一整行并使用.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转换为字符串,然后再转换为十六进制数字,它仍会抱怨。
答案 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)
使用int
或eval
功能:
>>> int('0x002300084', 16)
36700292
>>> eval('0x002300084')
36700292
>>> hex(36700292)
'0x2300084'
hex
,oct
和bin
函数都采用整数并返回字符串
while int
接受字符串(或unicode)和可选的基本参数(默认为10)并返回整数