我需要将python2.7 bytearray()或string或bytes()的元素转换为整数进行处理。在许多语言(即C等)中,字节和'字符'或多或少是8位整数,您可以执行数学运算。我如何说服python让我可以互换地使用(适当的)bytearrays或字符串?
考虑到Hex(stringlikeThing):
zerof = '0123456789ABCDEF'
def toHex(strg):
ba = bytearray(len(strg)*2)
for xx in range(len(strg)):
vv = ord(strg[xx])
ba[xx*2] = zerof[vv>>4]
ba[xx*2+1] = zerof[vv&0xf]
return ba
应该采用类似于字符串的字符串(即bytearray或string),并使可打印的字符串像十六进制文本一样。它将“string”转换为十六进制ASCII:
>>> toHex("string")
bytearray(b'737472696E67')
然而,当给出一个bytearray时:
>>> nobCom.toHex(bytearray("bytes"))
EX ord() expected string of length 1, but int found: 0 bytes
'for'循环中的ord()获取strg [xx],一个bytearray项,似乎是一个整数(而str的项是单个元素字符串) 所以ord()想要一个char(单个元素字符串)而不是int。
是否有一些方法或函数接受一个byte,char,small int,一个元素字符串的参数并返回它的值?
当然你可以检查类型(strg [xx])并费力地处理这些情况。
清音问题是:为什么(什么是推理)Python对字节和字符(普通或unicode)(即单个字符串)之间的差异如此挑剔?
答案 0 :(得分:0)
在python中索引bytearray
对象时,会得到一个整数。这个整数是bytearray中相应字符的代码,换句话说,就是ord
函数返回的东西。
python中没有采用字节,字符,小整数或一个元素字符串的方法,并在python中返回它的值。然而,制作这样的方法很简单。
def toInt(x):
return x if type(x) == int else ord(x)