Если строка имеет тип str
(не строка Unicode, тип unicode
), то это строка байтов, и срезы будут работать, как и ожидалось:
prefixed_bits = "extract this double:\xc2\x8eET\xfb!\t@"
pos = prefixed_bits.index(":") + 1
print "That looks like the value %f" % struct.unpack("d", prefixed_bits[pos:pos+8])
Это печатает 3.141593, двоичное представлениеиз которых закодирован в строковом литерале.