Reputation: 441
I want to make an int from a string in python. I thought to translate the string first to binary like this:
st = 'string'
binSt = ' '.join(format(ord(x), '08b') for x in st)
returns this:
01110011 01110100 01110010 01101001 01101110 01100111
And then I want to translate the binary( in groups of 8) to integers which should to return this:
115 116 114 105 110 103
How can I do this? Is there maybe a special function in python or something?
Upvotes: 1
Views: 3576
Reputation: 419
Using the solution for binary to int here: Convert base-2 binary number string to int
binSt = ' '.join([str(int(format(ord(x), '08b'), 2)) for x in st])
And if you just want an array of ints
int_array = [int(format(ord(x), '08b'), 2) for x in st]
Addressing SpoonMeiser comments. you can avoid intermediate conversions with ord(x)
int_array = [ord(x) for x in st]
Upvotes: 1
Reputation: 309881
Why not use a bytearray
?
>>> barr = bytearray('string')
>>> barr[0]
115
Bytearray does exactly what you want -- It interprets each character in the string as an integer in the range from 0
-> 255
.
Upvotes: 2
Reputation: 137
You can simply do
r = [int(numbs, 2) for numbs in binSt.split(' ')]
int(str, baseNumber)
will read the string str
and convert it to int
using baseNumber
so int("0xFF", 16) = 255
and int("11", 2) = 3
Upvotes: 2
Reputation: 10399
You can use the int() function:
result = ''
st = 'string'
binSt = ' '.join(format(ord(x), '08b') for x in st)
binSt_split = binSt.split()
for split in binSt_split:
result = result + str(int(split,2) + ' '
print result
Upvotes: 2
Reputation: 28199
String to binary and then to decimal :
st = 'string'
binSt = ' '.join(format(ord(x), '08b') for x in st)
binSt
##'01110011 01110100 01110010 01101001 01101110 01100111'
bin=binSt.split()
bin
##['01110011', '01110100', '01110010', '01101001', '01101110', '01100111']
print(map(lambda x: int(x,2), bin))
##[115, 116, 114, 105, 110, 103]
##
is used for outputs
Upvotes: 1