2017-06-09 95 views
1

我做一个集成的低四位和我有一个字段以下条件:十六进制值分配给字节

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

我试图追加六角楼但这是错误的:

data << "%X" % 15 

我想我需要的最后一个字节,并在其上执行一些神奇的,可能是一些位运算:

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

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

回答

3

0xF的二进制表示形式为0b1111。方便的是,这一切都是1 s,并且一个简单的方法来确保一点是1,是OR它与1。因此,确保半字节中所有位的简单方法是使用0b1111/0xF/15OROR

访问一个半字节通常是不方便的,但幸运的是,还有一个简单的方法可以确保它保持原样:OR它与0。因此,为了确保字节的第一个半字节保持原来的状态,我们需要OR第一个半字节与0b0000,并且为了确保最后半字节是0xF,我们需要OR它与0b1111

把那都在一起,我们需要OR整个最后一个字节与0b00001111/0x0F(这只是0b1111/0xF):

data.bytes.last |= 0xF 
+0

谢谢你的澄清,很好的解释,我想我抓住总体思路。不幸的是,目前我无法测试这个,但是我明天会给它一个测试,希望这是我需要的解决方案。 – user2362462

+0

我今天测试过了,不得不在我身上做一些调整,但核心逻辑就是你在这里解释的那个。谢谢! – user2362462