面向萌新的位与 0xFF 解释

TL; DR 0xFF 通常用于过滤,也叫掩码。和它进行与运算,结果是只保留一个数据的最低8位,其他位全部置0。 背景 在位运算中经常看到A & 0xFF 的身影,甚至已经成了习惯性动作,但一直没有深究它的具体意义,直到这次忘记了神奇的 0xFF,于是发生了很糟糕的事情… 本来是一个很简单的需求——将 int 转为字节数组,然后再转换回来。为了不误导大家,这里先给出正确的实现(kotlin): fun Int.toBytes(bytes: ByteArray? = null): ByteArray { val result = bytes ?: ByteArray(4) if (result.size < 4) { throw IllegalArgumentException("bytes capacity must >= 4") } result[0] = (this shr 24).toByte() result[1] = (this shr 16).toByte() result[2] = (this shr 8).toByte() result[3] = this.toByte() return result } fun ByteArray.toInt(): Int { if (this.size < 4) { throw IllegalArgumentException("bytes size must >= 4") } return ((this[0]....

August 19, 2021 · Chenhe