2017-08-04 107 views
0

我想根据另一个key来计算第10轮的key,如果ikk是一个字符串,那么如何将它转换为字符串呢?如何将一组十六进制数字作为字符串?

def test(): 
    ##### ikk= '000102030405060708090a0b0c0d0e0f' ===> It works!!! 
    ikk= 000102030405060708090a0b0c0d0e0f 
    ik=str(ikk) 
    data = [re.findall('..', item) for item in key.split('\n')] 
    for item in data: 
     if item: 
      result = [int(x, 16) for x in item] 
      print(result) 
      result = keyScheduleRounds(result, 0, 10) 
      tt=''.join(["%02x"%d for d in result]) 
      print(tt) 

错误,我发现:

ik= str(000102030405060708090a0b0c0d0e0f)       ^
SyntaxError: invalid token 
+0

看起来'000102030405060708090a0b0c0d0e0f'不是一个有效的数字。 – taras

+0

@taras它是我的钥匙,它是正确的我只需要把它作为字符串:'000102030405060708090a0b0c0d0e0f',这是我的问题。 – tierrytestu

+0

不,你可以用它作为一个十六进制,如果你告诉Python那是一个十六进制。像这样:ikk = 0x000102030405060708090a0b0c0d0e0f – BoboDarph

回答

1

如果IKK是一个十六进制数字(和它看起来像),试试这个方法:ikk = 0x000102030405060708090a0b0c0d0e0f。注意0x在开始时会告诉python这是一个十六进制数字,而不是十进制数字。

+0

它给了我这个错误:data = [key.split('\ n')中item的[re.findall('..',item)] AttributeError:'long'对象没有属性'split' – tierrytestu

+1

因为您试图在非字符串对象上使用split函数。 – BoboDarph

+0

@tierrytestu你想用这个十六进制数来完成什么? –

1

集IK:

ik= bytearray.fromhex("000102030405060708090a0b0c0d0e0f").decode() 

这将十六进制转换为字符串。完整的代码写在下面。

def test(): 
    ik = bytearray.fromhex("000102030405060708090a0b0c0d0e0f").decode() 
    data = [re.findall('..', item) for item in key.split('\n')] 
    for item in data: 
     if item: 
      result = [int(x, 16) for x in item] 
      print(result) 
      result = keyScheduleRounds(result, 0, 10) 
      tt=''.join(["%02x"%d for d in result]) 
      print(tt) 
+0

它给了我这个错误:UnicodeEncodeError:'十进制'编解码器无法编码字符u'\ x00'在位置0:无效十进制Unicode字符串 >>> – tierrytestu

相关问题