【问题标题】:How to cast an int larger than 127 to a byte in Clojure如何将大于 127 的 int 转换为 Clojure 中的字节
【发布时间】:2018-04-16 16:58:59
【问题描述】:

字节 0xea 等于以 10 为底的 234。在 Python 中,字节使用无符号整数表示,但在 Java 中,它们是 signed, two's complement integers

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

但是,在 Clojure 中,函数 (byte 234) 应该强制转换为 -22,但它会引发 clojure.lang.RT.byteCast 异常。

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

【问题讨论】:

    标签: java python clojure byte twos-complement


    【解决方案1】:

    当可以溢出时你应该使用unchecked-byte

    (unchecked-byte 234)
    => -22
    

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-11-14
      • 1970-01-01
      • 1970-01-01
      • 2016-03-04
      • 2016-02-20
      相关资源
      最近更新 更多