我将如何在crystal lang中提取十六进制数的位,它主要像ruby,因为我可以提取一个字节,但不能提取其中的4位
0x0312FCFC
----^^(1和2(
如何提取这2这是我提取第一个和最后4个的代码
op = ((x.to_i(16)) >> 24) & 0xff
im = (x.to_i(16)) & 0xffff
我试过的是
a1 = ((x.to_i(16)) >> 16) & 0xf0
a2 = ((x.to_i(16)) >> 16) & 0x0f
首先,将需要的位数向右移动。在您的示例中,它应该是16(4*4
,因为您希望跳过最后4个十六进制字符FCFC
(和20(5*4
,跳过2FCFC
(。然后屏蔽最后一个字节(... & 0xF
(。
x = 0x0312FCFC
a = (x >> 16) & 0xF # a = 2
b = (x >> 20) & 0xF # b = 1
是的,Ruby和Crystal中的代码是相同的。