Вы можете использовать что-то вроде следующего, которое использует битовую манипуляцию (big-endian):
def chunk2int(chunk):
""" Converts a chunk (string) into an int, 8 bits per character """
val = 0
for c in chunk:
val = (val << 8) | (ord(c) & 0xFF)
return val
def int2chunk(val):
""" Converts an int into a chunk, consuming 8 bits per character """
rchunk = []
while val:
rchunk.append(val & 0xFF)
val >>= 8
return ''.join(chr(c) for c in reversed(rchunk))
textdata = "this is my test data"
chunks = [textdata[i:i + 4] for i in range(0, len(textdata), 4)]
print(chunks)
data = [chunk2int(c) for c in chunks]
print(data)
chunks = [int2chunk(d) for d in data]
print(chunks)
Производит:
['this', ' is ', 'my t', 'est ', 'data']
[1952999795, 543781664, 1836654708, 1702065184, 1684108385]
['this', ' is ', 'my t', 'est ', 'data']
Если вы используете символы с 1 <= ord(c) <= 255
во входном тексте, это будет работать. Если в вашей строке есть нулевые байты, метод int2chunk
может завершиться досрочно, и в этом случае вам придется дополнить фрагменты.
Также есть модуль struct , который, возможно, стоит изучить, и где вы можете изменить порядок байтов намного проще.