在 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 中复制相同的操作? 你可以帮我吗?
好吧,根本不可能有任何结果(包括"不同的"结果),因为代码无法编译。按位 OR 运算的结果int
,因此您必须将flags
类型更改为 int
或将结果转换为 byte
:
int flags = ClientFlags.Flag1 | ClientFlags.Flag2;
或
byte flags = (byte)(ClientFlags.Flag1 | ClientFlags.Flag2);
然后,您将获得与 C# 中相同的结果,即 3
。
如果您的意思是使用 .NET 可以将结果输出为"Flag1, Flag2",那么您可能必须自己实现它。