scala - 如何在 Scala 中将三个字节相加?
问题描述
我尝试了很多方法,但仍然不知道如何做到这一点:
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
推荐阅读
- powershell - 在PowerShell中将多行文本粘贴为变量不起作用
- python - Python、XP 到电平转换器
- javascript - Javascript中的拉格朗日算法
- reactjs - 优雅的方式来渲染道具,无论它们的类型如何
- c - 为什么我们在扫描c语言输入的字符串时不在scanf中指定'&'符号?
- javascript - 如何在 skulpt 中停止脚本
- javascript - 通用类型数组 lint 警告 Array<>
- c++ - 在最少的操作中实现字符串所有字符的相同频率。(所有字符都从 'a' 到 'z')
- c# - wpf 使用 bitmapimage 作为 TransformedBitmap 的源
- java - 如何将 UTF-16 编码的 char 转换为 CP855 编码的 char?