1

我正在做一个整合,我有一个领域的以下条件:

如果数据的长度是奇数,则最后一个字节的低半字节被赋值为十六进制“F”。这个用于填充的十六进制“F”确保整个字节数用于字段并且不包括在项目的长度中。

我尝试附加十六进制 F,但这是错误的:

data << "%X" % 15

我想我需要获取最后一个字节并对其执行一些魔术,可能是一些按位操作:

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

如果有人能指出我正确的方向,我会很高兴。

4

1 回答 1

3

的二进制表示0xF0b1111。方便的是,这一切都是1s,并且一个简单的方法来确保一点是1, 是OR对它1。因此,确保半字节中所有位的简单方法是使用//1到半字节。OR0b11110xF15

访问单个 nibble 通常不方便,但幸运的是,还有一种简单的方法可以确保 bit 保持原样:OR使用0. 因此,为了确保字节的第一个半字节保持原样,我们需要对OR第一个半字节使用0b0000,并确保最后一个半字节是0xF,我们需要OR使用0b1111

把所有这些放在一起,我们需要使用/ (这只是/ )OR的整个最后一个八位字节:0b000011110x0F0b11110xF

data.bytes.last |= 0xF
于 2017-06-09T11:32:19.167 回答