C# 玩字节…需要从java转换到C
我不习惯在我的代码中操作字节,我有一段用Java编写的代码,我需要将其转换为C等价物:C# 玩字节…需要从java转换到C,c#,java,byte,C#,Java,Byte,我不习惯在我的代码中操作字节,我有一段用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 &
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);
编辑:找到第二个问题的答案:
在C中不能有最终参数
默认情况下,方法是最终的。
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位移位运算符的更多信息:
在C中不能有最终参数
默认情况下,方法是最终的。
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位移位运算符的更多信息:基本上去掉final,并将>>>更改为>>基本上去掉final,将>>>更改为>>谢谢您的明确回答!java方法Double.doubleToLongBitsval;的任何等效项?还请记住,由于“byte”在C中是无符号的,而在Java中是有符号的,这就是为什么在C中不需要无符号字节移位运算符的原因。所有有符号整数都有无符号等价物。@ibiza我不确定。你应该试着回答另一个问题。谢谢你先生的明确回答!java方法Double.doubleToLongBitsval;的任何等效项?还请记住,由于“byte”在C中是无符号的,而在Java中是有符号的,这就是为什么在C中不需要无符号字节移位运算符的原因。所有有符号整数都有无符号等价物。@ibiza我不确定。你应该试着打开另一个问题。