Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/334.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Java中从C#转换标志_C#_Java_Enums_Byte_Enum Flags - Fatal编程技术网

在Java中从C#转换标志

在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代码中,我复制了没有枚举的

我正在将一部分代码从C#程序翻译为Java,其中定义了一个[Flag]enum,如下所示:

[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);