我尝试了很多方法,但仍然不知道如何做到这一点:
def to24Bits(p: Int, q: Int, r: Int): Int = {
(p<<8|q<<16|r<<24)
}
to24Bits(0xFF, 0x00, 0x00) => 0xFF0000
to24Bits(0x00, 0xFF, 0x00) => 0x0000FF
to24Bits(0x00, 0xFF, 0x00) => 0x0000FF
to24Bits(0x11, 0x22, 0x33) => 0x112233
to24Bits(0xFF, 0xFF, 0xFF) => 0xFFFFFF
我编辑了这个:
to24Bits(0xffffff11, 0xffffff88, 0xffffff00) => 0x118800
如果(无论出于什么原因)你想要向它提供负整数,那么你必须用& 0xFF
切断第一个字节之上的所有位:
def to24Bits(p: Int, q: Int, r: Int): Int = {
((p & 0xFF) << 16) | ((q & 0xFF) << 8) | (r & 0xFF)
}
你的例子:
for ((p, q, r) <- List(
(0xFF, 0x00, 0x00),
(0x00, 0xFF, 0x00),
(0x00, 0x00, 0xFF),
(0x11, 0x22, 0x33),
(0xFF, 0xFF, 0xFF),
(0xffffff11, 0xffffff88, 0xffffff00)
)) {
printf("0x%06X\n", to24Bits(p, q, r))
}
输出:
0xFF0000
0x00FF00
0x0000FF
0x112233
0xFFFFFF
0x118800