Sinkos
Sinkos

Reputation: 43

How to properly transform a string with bitwise operations

I need to convert the string "100" using bitwise without if after two adjacent digits The relation 100 is divided:

Accordingly, the condition is that instead of two digits, we must put 1 or 0 (opposite bit2). My python code does not work correctly when 00 is taken.

Maybe someone can advise how to fix it properly?

code

def _str_to_bytes(virkne) -> bytes:
    bin_data = virkne.zfill((len(virkne) + 7) // 8 * 8)
    data_in_bytes = int(bin_data, 2).to_bytes((len(bin_data) + 7) // 8, byteorder='big')
    return data_in_bytes

virkne = "100"
garums = len(virkne)

byte = _str_to_bytes(virkne)
int_value = int.from_bytes(byte, byteorder='big')  

print(f"virkne is: {int_value:02b}")

for i in range(garums - 1):
    print('-'*30)
    bit1 = (int_value >> (garums - 1 - i)) & 1
    bit2 = (int_value >> (garums - 2 - i)) & 1
    ad = (bit1 << 1) | bit2
    print(f"{bit1}{bit2} -> 0b{ad:02b} = {ad}")

    modified = (int_value & ~(0b10 << (garums - 2 - i))) | ((1 - bit2) << (garums - 2 - i))
    print(f"Modified: {modified} ({modified:0{garums-1}b})")

output:

virkne is: 100
------------------------------
10 -> 0b10 = 2
Modified: 2 (10)
------------------------------
00 -> 0b00 = 0
Modified: 5 (101)

Upvotes: -5

Views: 25

Answers (0)

Related Questions