【发布时间】:2015-03-11 12:19:55
【问题描述】:
我正在学习密码学课程,并设法将一串十六进制值转换为它们的 int 等价物。我知道想使用 chr(x) 函数将这些转换为等效的字符,该函数采用 0-255 之间的数字并返回相应的 ASCII 值。然后我想把所有这些都显示为一个字符串。
下面是一些简单的代码:
x = [49, 21, 92, 196, 78, 238, 234, 170, 168, 139, 181, 95, 248, 138, 170, 175, 249, 145, 23, 116, 65, 20, 69, 91, 191, 244, 67, 62, 225, 23, 120, 132, 75, 184, 143, 250, 160, 0, 13, 220, 199, 113, 29, 216, 136, 133, 90, 168, 128, 4, 78, 229, 94, 238, 233, 159, 250, 164, 64, 11, 177, 22, 99, 52, 73, 156, 193, 20, 70, 111, 251, 183, 119, 120, 140, 205, 223, 242, 45, 211, 58, 175, 255, 240, 2, 33, 29, 223, 255, 255, 245, 91, 180, 64, 3, 59, 181, 81, 16, 13, 208, 13, 208, 4, 69, 85, 84, 70, 104, 138, 174, 235, 185, 152, 134, 98, 34, 43, 177, 19, 55, 125, 218, 174, 232, 133, 87, 117, 85, 83, 60, 204, 205, 216, 136, 136, 131, 58, 167, 123, 188, 195, 55, 117, 82, 32, 14, 224, 6, 110, 229, 81, 21, 93, 210, 34, 44, 201, 149, 84, 78, 235, 186, 165, 80, 2, 37, 91, 184, 140, 204, 197, 87, 126, 238, 229, 89, 148, 65, 24, 140, 206, 231, 125, 220, 198, 107, 188, 196, 65, 21, 85, 86, 107, 189, 219, 179, 54, 107, 187, 188, 202, 163, 62, 232, 135, 119, 116, 67, 48, 1, 31, 251, 188, 202, 170, 163, 59, 184, 131, 59, 178, 34, 32, 8, 128, 9, 149, 86, 96, 9, 152, 135, 120, 129, 21, 95, 246, 101, 82, 40, 134, 103, 118, 100, 71, 112, 3, 61, 222, 224, 15, 243, 61, 213, 82, 36, 68, 64, 0, 10, 161, 25, 155, 177, 21, 89, 150, 97, 16, 11, 177, 17, 30, 239, 243, 62]
result = ""
for i in x:
print chr(i)
result = result + chr(i)
print result
让我感到困惑的是,当我执行“print chr(i)”时,我得到了字符 '1',它是 42 的 ASCII。但是,当我将它附加到“结果”字符串时,它似乎发生了变化。当我在最后一行打印“结果”时,字符串的第一个字符不是“1”。
有什么想法吗?现在让我头疼了 2 天,直到我设法将我的加密代码的问题追溯到这几行。
干杯
【问题讨论】:
-
试试这个方法 print ''.join(map(chr, x))
-
感谢您的回答。这是最糟糕的事情。您发送的代码与我的完全相同。仍然第一个字符不是'1'。可以的话试试看,你自己看看:/
-
先试试这个是 '1' : x = [49,50]; print ';'.join(map(chr, x))
-
这很奇怪,当我运行你的代码时,我得到的第一个字符是
1。也许你误读了?尝试打印result[0],看看输出是什么。 -
chr(49) === '1' 和 chr(42) === '*'
标签: python string char type-conversion