bbb
bbb

Reputation: 267

Convert Python byte to "unsigned 8 bit integer"

I am reading in a byte array/list from socket. I want Python to treat the first byte as an "unsigned 8 bit integer". How is it possible to get its integer value as an unsigned 8 bit integer?

Upvotes: 22

Views: 104769

Answers (3)

codeape
codeape

Reputation: 100906

Use the struct module.

import struct
value = struct.unpack('B', data[0:1])[0]

We have to specify a range of 1 (0:1), because Python 3 converts automatically to an integer otherwise.

Note that unpack always returns a tuple, even if you're only unpacking one item.

Also, have a look at this SO question.

Upvotes: 23

musicinmybrain
musicinmybrain

Reputation: 641

Another very reasonable and simple option, if you just need the first byte’s integer value, would be something like the following:

value = ord(data[0])

If you want to unpack all of the elements of your received data at once (and they’re not just a homogeneous array), or if you are dealing with multibyte objects like 32-bit integers, then you’ll need to use something like the struct module.

Upvotes: 7

SilentGhost
SilentGhost

Reputation: 319929

bytes/bytearray is a sequence of integers. If you just access an element by its index you'll have an integer:

>>> b'abc'
b'abc'
>>> _[0]
97

By their very definition, bytes and bytearrays contain integers in the range(0, 256). So they're "unsigned 8-bit integers".

Upvotes: 11

Related Questions