在 Java 中从 C# 转换标志

本文关键字:转换 标志 中从 Java | 更新日期: 2023-09-27 18:30:34

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

[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 中复制相同的操作? 你可以帮我吗?

在 Java 中从 C# 转换标志

好吧,根本不可能有任何结果(包括"不同的"结果),因为代码无法编译。按位 OR 运算的结果int,因此您必须将flags类型更改为 int 或将结果转换为 byte


int flags = ClientFlags.Flag1 | ClientFlags.Flag2;


byte flags = (byte)(ClientFlags.Flag1 | ClientFlags.Flag2);

然后,您将获得与 C# 中相同的结果,即 3

如果您的意思是使用 .NET 可以将结果输出为"Flag1, Flag2",那么您可能必须自己实现它。