2013-09-06 3 views
1

я перевожу часть кода из C# программа Java, где определен [флаг] перечисление как это:Преобразовать Флаги из C# в 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? Вы можете мне помочь?

+6

Определите «разные» ... что вы видите? Примечание: все, что связано с MSB (т. Е. 128-255 в C# и -128-1 в Java), будет * выглядеть * другим (потому что в Java 'byte' подписано) - но поразрядным образом: оно идентично –

+2

Кроме того, ваш код на C# основан на 'int', а не' byte' - ему нужно будет 'public enum ClientFlags: byte' быть' byte' –

+0

Спасибо @MarcGravell, я решил! : D –

ответ

0

Ну, не может быть никакого результата вообще (в том числе «другого»), так как код не будет компилироваться. Результат побитового ИЛИ операции int, так что вы должны изменить flags типа для int или конвертировать результат в byte:

 

int flags = ClientFlags.Flag1 | ClientFlags.Flag2; 
 

или

 

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

Тогда вы получите тот же результат, как и в C#, который есть 3.

Если вы имеете в виду, что с .NET вы можете выводить результат как «Flag1, Flag2», то вам, вероятно, придется реализовать это самостоятельно.