4

Background: I need to send a numerical value as a byte to an external device, but I have run into a problem. My code is:

ser=serial.Serial("COM3",9600, timeout=0)
ser.write(value)

where "value" is an int that I read have read. The problem is, when I send this, it sends the character value, not the actual value (it sends the byte value 31 for the number 5, since that is the unicode position for it, I believe)

In reality, I want to be able to send it the character "\x05" for example. I guess my question is, how would I convert and int 5 to a char "\x05", or 37 to "\x37"

2 Answers 2

8

Use the built-in function chr().

If you have a list of such integers you need to send, you might consider using a bytearray().

Alternatively, in newer versions of Python you can simply use a byte type.

Sign up to request clarification or add additional context in comments.

Comments

5

you can use this..

bytes(chr(my_int))    # not strictly correct unless 0<=my_int<=255
bytes((my_int,))

2 Comments

The first one fails, at least in Python 3, because it's trying to convert a string into bytes without specifying an encoding. (Note to readers, see joelonsoftware.com/articles/Unicode.html if encoding issues are new to you.) The second one works great. If the trailing comma used to create a tuple looks bad to you, you can also do something like bytes([5]).
The second one fails under Python 2, where bytes((1,)) returns the string '(1,)'. Under Python 3 this returns b'\x01'. So don't use either of these if you expect to support both Python 2 and 3.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.