Skip to main content
added 34 characters in body
Source Link
Ramrab
  • 28.9k
  • 3
  • 9
  • 27

Shifting right by 2 is correct for getting your byte1 value. You could also floor divide by 4.

For byte2, you can "mask" src using a bitwise AND to get the 2 least significant bits. Then shift left by 6 or multiply by 64 like this:

src = 814

assert src < 1024 # ensure no more than 10 bits in src

w = 8

print(f"{src=:0{w}b}")

byte1a = src >> 2 # right shift by 2
print(f"{byte1a=:0{w}b}")

byte1b = src // 4 # floor divide by 4
print(f"{byte1b=:0{w}b}")

byte2a = (src & 3) << 6 # left shift by 6
print(f"{byte2a=:0{w}b}")

byte2b = (src & 3) * 64 # multiply by 64
print(f"{byte2b=:0{w}b}")

Output:

src=1100101110
byte1a=11001011
byte1b=11001011
byte2a=10000000
byte2b=10000000

Shifting right by 2 is correct for getting your byte1 value. You could also floor divide by 4.

For byte2, you can "mask" src using a bitwise AND to get the 2 least significant bits. Then shift left by 6 or multiply by 64 like this:

src = 814

assert src < 1024 # ensure no more than 10 bits in src

w = 8

print(f"{src=:0{w}b}")

byte1a = src >> 2 # right shift by 2
print(f"{byte1a=:0{w}b}")

byte1b = src // 4 # floor divide by 4
print(f"{byte1b=:0{w}b}")

byte2a = (src & 3) << 6
print(f"{byte2a=:0{w}b}")

byte2b = (src & 3) * 64
print(f"{byte2b=:0{w}b}")

Output:

src=1100101110
byte1a=11001011
byte1b=11001011
byte2a=10000000
byte2b=10000000

Shifting right by 2 is correct for getting your byte1 value. You could also floor divide by 4.

For byte2, you can "mask" src using a bitwise AND to get the 2 least significant bits. Then shift left by 6 or multiply by 64 like this:

src = 814

assert src < 1024 # ensure no more than 10 bits in src

w = 8

print(f"{src=:0{w}b}")

byte1a = src >> 2 # right shift by 2
print(f"{byte1a=:0{w}b}")

byte1b = src // 4 # floor divide by 4
print(f"{byte1b=:0{w}b}")

byte2a = (src & 3) << 6 # left shift by 6
print(f"{byte2a=:0{w}b}")

byte2b = (src & 3) * 64 # multiply by 64
print(f"{byte2b=:0{w}b}")

Output:

src=1100101110
byte1a=11001011
byte1b=11001011
byte2a=10000000
byte2b=10000000
added 34 characters in body
Source Link
Ramrab
  • 28.9k
  • 3
  • 9
  • 27

Shifting right by 2 is correct for getting your byte1 value. You could also floor divide by 4.

For byte2, you can "mask" src using a bitwise AND to get the 2 least significant bits. Then shift left by 6 or multiply by 64 like this:

src = 814

assert src < 1024 # ensure no more than 10 bits in src

w = 8

print(f"{src=:0{w}b}")

byte1byte1a = src >> 2 # right shift by 2
print(f"{byte1=byte1a=:0{w}b}")

byte2byte1b = src // 4 # floor divide by 4
print(f"{byte1b=:0{w}b}")

byte2a = (src & 3) << 6
print(f"{byte2=byte2a=:0{w}b}") 

byte2b = (src & 3) * 64
print(f"{byte2b=:0{w}b}")

Output:

src=1100101110
byte1=11001011byte1a=11001011
byte2=10000000byte1b=11001011
byte2a=10000000
byte2b=10000000

Shifting right by 2 is correct for getting your byte1 value.

For byte2, you can "mask" src using a bitwise AND to get the 2 least significant bits. Then shift left by 6 like this:

src = 814
w = 8

print(f"{src=:0{w}b}")

byte1 = src >> 2
print(f"{byte1=:0{w}b}")

byte2 = (src & 3) << 6
print(f"{byte2=:0{w}b}")

Output:

src=1100101110
byte1=11001011
byte2=10000000

Shifting right by 2 is correct for getting your byte1 value. You could also floor divide by 4.

For byte2, you can "mask" src using a bitwise AND to get the 2 least significant bits. Then shift left by 6 or multiply by 64 like this:

src = 814

assert src < 1024 # ensure no more than 10 bits in src

w = 8

print(f"{src=:0{w}b}")

byte1a = src >> 2 # right shift by 2
print(f"{byte1a=:0{w}b}")

byte1b = src // 4 # floor divide by 4
print(f"{byte1b=:0{w}b}")

byte2a = (src & 3) << 6
print(f"{byte2a=:0{w}b}") 

byte2b = (src & 3) * 64
print(f"{byte2b=:0{w}b}")

Output:

src=1100101110
byte1a=11001011
byte1b=11001011
byte2a=10000000
byte2b=10000000
Source Link
Ramrab
  • 28.9k
  • 3
  • 9
  • 27

Shifting right by 2 is correct for getting your byte1 value.

For byte2, you can "mask" src using a bitwise AND to get the 2 least significant bits. Then shift left by 6 like this:

src = 814
w = 8

print(f"{src=:0{w}b}")

byte1 = src >> 2
print(f"{byte1=:0{w}b}")

byte2 = (src & 3) << 6
print(f"{byte2=:0{w}b}")

Output:

src=1100101110
byte1=11001011
byte2=10000000