如何将大于127的int转换为clojure中的一个字节

时间:2018-04-16 16:59:00

标签: java python clojure byte twos-complement

字节0xea在基数10中等于234.在python中,字节使用无符号整数表示,但在java中,它们是signed, two's complement integers

例如,在Java中,如果我转换(byte)234,我会得到带符号的整数-22。当我在MessageDigest中使用这些字节时,我获得与在python中使用unsigned 234时相同的完全哈希输出。所以我相信这些代表相同的字节。

但是,在Clojure中,函数(byte 234)应转换为-22,而是抛出clojure.lang.RT.byteCast异常。

如何在clojure中将整数转换为字节?

1 个答案:

答案 0 :(得分:3)

当溢出时可以使用unchecked-byte

(unchecked-byte 234)
=> -22

仅供参考,也可以使用*unchecked-math*绑定切换默认行为:

(set! *unchecked-math* true)
=> true
(byte 234)
=> -22

但您可能希望将此非默认行为限制在可能的最小范围内。