0

I need to parse a network packet which consists of two bytes: first one consists of 8 bits that set certain flags depending on their order (for instance) and the second one is uint8 (which is simple)

  • 1 - online
  • 0 - not active
  • 1 - isPretty
  • 1 - isHandsome
  • 0 - bald
  • 0 - deaf
  • 0 - mute
  • 0 - blind

How do I parse it from a byte primitive?

2

1 Answer 1

4

Some useful Go standard library packages for dealing with binary:

For extracting single bits from a byte, you ought to use bitwise operators - |, & and >>.

For example:

package main

import (
    "fmt"
)

func main() {
    v := byte(0xB2)
    if (v >> 4) & 1 == 1 {
        fmt.Println("bit 4 (counting from 0) is set")
    }
}

This checks bit 4 (with bit 0 being the lowest bit in the byte) by shifting the byte value 4 positions to the right and AND-ing with 1. You can check the other bits in your flag value similarly. Feel free to write a function that replaces the 4 in the sample above with an argument N to check bit number N.

You can find more examples in other SO answers like this one or the ones @icza linked to in a comment.

Sign up to request clarification or add additional context in comments.

1 Comment

Does probably not matter in this example, but v & (1<<4) != 0 would be a bit more efficient because the shift can then be done at compile time.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.