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



今天我正在读取一个文件,并提取信息。我几乎什么都想明白了,但由于某种原因,我遇到了一个非常非常烦人的问题!我读了整行,并使用.split()命令将"句子"分解为"单词",对吗?然后我将"单词"别名为:

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

注意:我去掉了长度,因为在数据文件中,它被()封装,稍后,当我将其加载到.csv文件中时,会出现问题,因为()被用作负数。

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

实际上,我所需要做的就是添加起始地址(以十六进制表示,但以字符串形式读取)和长度(以int表示,以int形式读取)。我曾尝试过转换它们,但没有成功。我也试过

endAddress = startAddress + length - 1

它告诉我"-:'str'和'int'的操作数类型不受支持",所以,我已经尽可能地使用了它,但我只是没有弄清楚。我想通过strip删除十六进制值前面的0x,但后来它读起来是一个整数,这是不正确的。

我尝试的最后一件事是直接使用第[0]行和第[2]行(带条)来查找endAddress,但它给出了相同的错误。我试图通过声明startAddress=0xFFFFFFFF来强制类型,然后将其赋值为行[0],但这并没有起作用。那么,如果一个字符串抱怨它是十六进制的,而不是十六进制,我该怎么把它转换成十六进制呢?或者也许我添加它们的方法是错误的?我可以使用其他添加方法吗?

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

int采用一个可选参数,指定要将其转换为的整数的基数。所以你可以简单地称之为:

proper_int = int(number, 16)

为了得到一个恰当的表达。

例如:

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

如果你想添加零填充,我推荐zfill:

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

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

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

添加int

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

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

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

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

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

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

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

使用inteval函数:

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

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

相关内容

  • 没有找到相关文章

最新更新