在Java中从C#转换标志
我正在将一部分代码从C#程序翻译为Java,其中定义了一个[Flag]enum,如下所示:在Java中从C#转换标志,c#,java,enums,byte,enum-flags,C#,Java,Enums,Byte,Enum Flags,我正在将一部分代码从C#程序翻译为Java,其中定义了一个[Flag]enum,如下所示: [Flags] public enum ClientFlags { None = 0x00000000, Flag1 = 0x00000001, Flag2 = 0x00000002 ... 并在运行时使掩码操作类似于 ClientFlags.Flag1| ClientFlags.Flag2 在我的java代码中,我复制了没有枚举的
[Flags]
public enum ClientFlags
{
None = 0x00000000,
Flag1 = 0x00000001,
Flag2 = 0x00000002
...
并在运行时使掩码操作类似于
ClientFlags.Flag1| ClientFlags.Flag2
在我的java代码中,我复制了没有枚举的相同类:
public static byte None = (byte)0x0;
public static byte Flag1 = (byte)0x01;
public static byte Flag2 = (byte)0x02;
但当我做同样的手术时
byte flags = ClientFlags.Flag1 | ClientFlags.Flag2
那么结果就不同了!!如何在java中复制相同的操作?你能帮我吗?因为代码无法编译,所以根本不会有任何结果(包括“不同的”结果)。按位OR运算的结果是
int
,因此您必须将标志
类型更改为int
,或将结果转换为字节
:
int flags = ClientFlags.Flag1 | ClientFlags.Flag2;
或
然后您将得到与C中相同的结果,即3
如果您的意思是使用.NET可以将结果输出为'Flag1,Flag2',那么您可能必须自己实现它。定义“不同”。。。你在看什么?注意:任何涉及MSB的内容(即C#中的128-255,以及Java中的-128到-1)都会有所不同(因为在Java中,字节是有符号的)-但按位而言:它是相同的,所以C#代码基于
int
,不是byte
-它必须是public enum ClientFlags:byte
才能是byte
-basedHanks@marcGravel我已经解决了!!:D
byte flags = (byte)(ClientFlags.Flag1 | ClientFlags.Flag2);