代码之家  ›  专栏  ›  技术社区  ›  Bruno

播放字节……需要从Java转换到C语言

  •  1
  • Bruno  · 技术社区  · 14 年前

    我不习惯在我的代码中操纵字节,我有一段用Java编写的代码,我需要把它转换成它的C等价物:

    protected static final int putLong(final byte[] b, final int off, final long val) {
        b[off + 7] = (byte) (val >>> 0);
        b[off + 6] = (byte) (val >>> 8);
        b[off + 5] = (byte) (val >>> 16);
        b[off + 4] = (byte) (val >>> 24);
        b[off + 3] = (byte) (val >>> 32);
        b[off + 2] = (byte) (val >>> 40);
        b[off + 1] = (byte) (val >>> 48);
        b[off + 0] = (byte) (val >>> 56);
        return off + 8;
    }
    

    感谢您的帮助,我期待着从中学习。

    我也很想知道是否有一个与Java函数等价的C语言:

    Double.doubleToLongBits(val);
    

    编辑:找到第二个问题的答案: BitConverter.DoubleToInt64Bits

    2 回复  |  直到 14 年前
        1
  •  4
  •   Corey Sunwold    14 年前
    1. 在C中不能有最终参数#
    2. 默认情况下,方法是“最终”的。
    3. C中没有无符号右移#

    所以我们得到:

    protected static int putLong(byte [] b, int off, long val) {
        b[off + 7] = (byte) (val >> 0);
        b[off + 6] = (byte) (val >> 8);
        b[off + 5] = (byte) (val >> 16);
        b[off + 4] = (byte) (val >> 24);
        b[off + 3] = (byte) (val >> 32);
        b[off + 2] = (byte) (val >> 40);
        b[off + 1] = (byte) (val >> 48);
        b[off + 0] = (byte) (val >> 56);
        return off + 8;
    }
    

    有关C位移位运算符的详细信息: http://www.blackwasp.co.uk/CSharpShiftOperators.aspx

        2
  •  0
  •   Keith Nicholas    14 年前

    几乎要拿出决赛,然后将>>>改为>>