Convert bytes to int?

PythonPython 3.xIntType ConversionByte

Python Problem Overview


I'm currently working on an encryption/decryption program and I need to be able to convert bytes to an integer. I know that:

bytes([3]) = b'\x03'

Yet I cannot find out how to do the inverse. What am I doing terribly wrong?

Python Solutions


Solution 1 - Python

Assuming you're on at least 3.2, there's a built in for this:

> int.from_bytes( bytes, byteorder, *, signed=False ) > > ... > > The argument bytes must either be a bytes-like object or an iterable > producing bytes. > > The byteorder argument determines the byte order used to represent the > integer. If byteorder is "big", the most significant byte is at the > beginning of the byte array. If byteorder is "little", the most > significant byte is at the end of the byte array. To request the > native byte order of the host system, use sys.byteorder as the byte > order value. > > The signed argument indicates whether two’s complement is used to > represent the integer.

## Examples:
int.from_bytes(b'\x00\x01', "big")                         # 1
int.from_bytes(b'\x00\x01', "little")                      # 256

int.from_bytes(b'\x00\x10', byteorder='little')            # 4096
int.from_bytes(b'\xfc\x00', byteorder='big', signed=True)  #-1024

Solution 2 - Python

Lists of bytes are subscriptable (at least in Python 3.6). This way you can retrieve the decimal value of each byte individually.

>>> intlist = [64, 4, 26, 163, 255]
>>> bytelist = bytes(intlist)       # b'@\x04\x1a\xa3\xff'

>>> for b in bytelist:
...    print(b)                     # 64  4  26  163  255

>>> [b for b in bytelist]           # [64, 4, 26, 163, 255]

>>> bytelist[2]                     # 26 

Solution 3 - Python

int.from_bytes( bytes, byteorder, *, signed=False )

doesn't work with me I used function from this website, it works well

https://coderwall.com/p/x6xtxq/convert-bytes-to-int-or-int-to-bytes-in-python

def bytes_to_int(bytes):
    result = 0
    for b in bytes:
        result = result * 256 + int(b)
    return result

def int_to_bytes(value, length):
    result = []
    for i in range(0, length):
        result.append(value >> (i * 8) & 0xff)
    result.reverse()
    return result

Solution 4 - Python

In case of working with buffered data I found this useful:

int.from_bytes([buf[0],buf[1],buf[2],buf[3]], "big")

Assuming that all elements in buf are 8-bit long.

Solution 5 - Python

list() can be used to convert bytes to int:

list(b'\x03\x04\x05')
[3, 4, 5]

Solution 6 - Python

An old question that I stumbled upon while looking for an existing solution. Rolled my own and thought I'd share because it allows you to create a 32-bit integer from a list of bytes, specifying an offset.

def bytes_to_int(bList, offset):
    r = 0
    for i in range(4):
        d = 32 - ((i + 1) * 8)
        r += bList[offset + i] << d
    return r

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionVladimir ShevyakovView Question on Stackoverflow
Solution 1 - PythonPeter DeGlopperView Answer on Stackoverflow
Solution 2 - PythonRonaldView Answer on Stackoverflow
Solution 3 - Pythonnoura selemView Answer on Stackoverflow
Solution 4 - PythonPeter HirtView Answer on Stackoverflow
Solution 5 - PythonDmitriy WorkView Answer on Stackoverflow
Solution 6 - PythonJohn StablerView Answer on Stackoverflow