Bits and Bytes and Data Types (Test Code)

#================================================================== # display the bytes in an integer as bits # # FYI: www.geeksforgeeks.org/how-to-convert-int-to-bytes-in-python/ # ================================================================= # ---- # ---- create a string of bits from a list of bytes # ---- def bits_from_bytes(byt_list: list[bytes]) -> str: bit_strs = [] for byt in byt_list: bit_strs.append(f'{byt:<08b}') return ' '.join(bit_strs) # ---- # ---- bits in a byte # ---- print() for i in range(5): print(f'integer {i} = {i:08b}') # ---- # ---- bits in an ASCII character (byte) # ---- print() chars = ['a','b','c','d'] for c in chars: print(f'char = {c} integer {ord(c):<3} = {ord(c):08b}') # ---- # ---- bits in a large integer # ---- ints = [ 257, 32768, -127 ] for i in ints: if i < 0: bytes = i.to_bytes(4,signed=True) else: bytes = i.to_bytes(4) print() print(f'integer = {i:<5} bytes = {bytes}') print(bits_from_bytes(bytes))

#================================================================= # display the byte order of your system # display the number of bytes in an integer # ================================================================= import sys byte_order = sys.byteorder print() print(f'system is "{byte_order}" endian') # ----------------------------------------------------------------- def integer_bytes(integer:int, order:str='big') -> None: # ---- number of bytes in an integer def byte_length(integer): return (integer.bit_length() + 7) // 8 print() print(f'integer {integer}') numbyt = byte_length(integer) print() print(f'{numbyt} bytes in integer {integer}') bytes = integer.to_bytes(numbyt,order,signed=True) print() print(f'bytes: {bytes}') bits = ' '.join([f'{x:08b}' for x in bytes]) print (f'bits : {bits}') # ------------------------------------------------------- print() print('---- BIG endian ---------------------') integer_bytes(258) integer_bytes(-258) print() print('---- LITTLE endian ------------------') integer_bytes(258,'little') integer_bytes(-258,'little')