1

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?

Martijn Pieters
  • 1,048,767
  • 296
  • 4,058
  • 3,343
svs
  • 431
  • 1
  • 7
  • 20

5 Answers5

2

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
Scratch'N'Purr
  • 9,959
  • 2
  • 35
  • 51
2

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

Nicolas
  • 127
  • 1
  • 10
2

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.

mgilson
  • 300,191
  • 65
  • 633
  • 696
1

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]
Community
  • 1
  • 1
WreckeR
  • 409
  • 3
  • 12
  • 1
    Having the int -> binary and binary -> int on one line like this seems pointless. If you didn't want the intermediate value (the binary representation) you'd just use `ord(x)` – SpoonMeiser Apr 26 '16 at 16:29
  • I was answering the OPs question to translate the binary strings to ints. I agree the extra conversions can be avoided. – WreckeR Apr 26 '16 at 16:31
  • I just mean that it probably a less helpful answer written this way. I think it's implied that the OP actually wanted the binary representation for some reason – SpoonMeiser Apr 26 '16 at 16:36
1

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

Ani Menon
  • 27,209
  • 16
  • 105
  • 126