为一个字节的低半字节分配一个十六进制值
Assign a hex value to the low nibble of a byte
我正在做一个整合,我有一个字段的以下条件:
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.
我尝试附加十六进制 F,但这是错误的:
data << "%X" % 15
我想我需要获取最后一个字节并对它执行一些魔术,可能是一些按位运算:
low_nibble = data.bytes.last.get_low_nibble
low_nibble = transform_low_nibble_to_hex
data << low_nibble
如果有人能指出正确的方向,我将很高兴。
0xF
的二进制表示是0b1111
。方便的是,这都是 1
,确保位是 1
的一个简单方法是 OR
它与 1
。因此,确保半字节中的所有位都是 1
的一种简单方法是 OR
使用 0b1111
/ 0xF
/ 15
.[=34 的半字节=]
访问单个半字节通常很不方便,但值得庆幸的是,还有一种简单的方法可以确保位保持原样:OR
它与 0
。因此,为了保证字节的第一个半字节保持原样,我们需要OR
第一个半字节0b0000
,并确保最后一个半字节是0xF
,我们需要 OR
它与 0b1111
.
将所有这些放在一起,我们需要 OR
整个最后一个八位位组 0b00001111
/ 0x0F
(这只是 0b1111
/ 0xF
) :
data.bytes.last |= 0xF
我正在做一个整合,我有一个字段的以下条件:
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.
我尝试附加十六进制 F,但这是错误的:
data << "%X" % 15
我想我需要获取最后一个字节并对它执行一些魔术,可能是一些按位运算:
low_nibble = data.bytes.last.get_low_nibble
low_nibble = transform_low_nibble_to_hex
data << low_nibble
如果有人能指出正确的方向,我将很高兴。
0xF
的二进制表示是0b1111
。方便的是,这都是 1
,确保位是 1
的一个简单方法是 OR
它与 1
。因此,确保半字节中的所有位都是 1
的一种简单方法是 OR
使用 0b1111
/ 0xF
/ 15
.[=34 的半字节=]
访问单个半字节通常很不方便,但值得庆幸的是,还有一种简单的方法可以确保位保持原样:OR
它与 0
。因此,为了保证字节的第一个半字节保持原样,我们需要OR
第一个半字节0b0000
,并确保最后一个半字节是0xF
,我们需要 OR
它与 0b1111
.
将所有这些放在一起,我们需要 OR
整个最后一个八位位组 0b00001111
/ 0x0F
(这只是 0b1111
/ 0xF
) :
data.bytes.last |= 0xF