简体   繁体   中英

Assign a hex value to the low nibble of a byte

I am doing an integration and I have the following condition for a field:

If the length of the data is odd, the low nibble of the last byte is assigned the value hex 'F'. This hex 'F' for padding ensures that a whole number of bytes are used for the field and is not included in the length of the item.

I tried appending the hex F, but this is wrong:

data << "%X" % 15

I suppose I need to get the last byte and perform some magic on it, probably some bitwise operation:

low_nibble = data.bytes.last.get_low_nibble
low_nibble = transform_low_nibble_to_hex
data << low_nibble

I will be glad if someone can point me in the right direction.

The binary representation of 0xF is 0b1111 . Conveniently, this is all 1 s, and an easy way to ensure a bit is 1 , is to OR it with 1 . So, an easy way to ensure all the bits in a nibble are 1 is to OR the nibble with 0b1111 / 0xF / 15 .

Accessing a single nibble is usually inconvenient, but thankfully, there is also an easy way to ensure that a bit stays what it was: OR it with 0 . Therefore, in order to ensure that the first nibble of the byte stays what it was, we need to OR the first nibble with 0b0000 , and to ensure that the last nibble is 0xF , we need to OR it with 0b1111 .

Put that all together, we need to OR the entire last octet with 0b00001111 / 0x0F (which is just 0b1111 / 0xF ):

data.bytes.last |= 0xF

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM