sarshad
sarshad

Reputation: 331

How to make a Python string out of non-ascii "bytes"

I need to create a Python string consisting of non-ascii bytes to be used as a command buffer in a C module. I can do that if I write the string by hand:

mybuffer = "\x00\x00\x10"

But I cannot figure out how to create the string on the fly if I have a set of integers which will become the bytes in the string. Concatenating an integer with a string is a TypeError.

So if I have a list of integers lets say:

myintegers = [1, 2, 3, 10]

How can I convert that into a string "\x01\x02\x03\x0A"

I am using Python 2.6.

Upvotes: 5

Views: 1754

Answers (3)

Mark Tolonen
Mark Tolonen

Reputation: 177891

Python 2.X

''.join(chr(i) for i in myintegers)

Python 3.X

bytes(myintegers)

Upvotes: 3

unutbu
unutbu

Reputation: 880079

In [28]: import struct

In [29]: struct.pack('{0}B'.format(len(myintegers)),*myintegers)
Out[29]: '\x01\x02\x03\n'

Note that

In [47]: '\x01\x02\x03\n'=="\x01\x02\x03\x0A"
Out[47]: True

Upvotes: 0

JasonFruit
JasonFruit

Reputation: 7875

u''.join(map(unichr, myintegers)) will do what you want nicely.

Upvotes: 4

Related Questions