如何在Scala中添加三个字节?

问题描述 投票:-2回答:1

我尝试了很多方法,但仍然不知道如何做到这一点:

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
scala binary byte
1个回答
1
投票

如果(无论出于什么原因)你想要向它提供负整数,那么你必须用& 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
© www.soinside.com 2019 - 2024. All rights reserved.