Probleme de cast (c# to java) [Résolu]

Messages postés
22
Date d'inscription
jeudi 9 octobre 2008
Statut
Membre
Dernière intervention
23 octobre 2012
- - Dernière réponse : sheppertizer
Messages postés
22
Date d'inscription
jeudi 9 octobre 2008
Statut
Membre
Dernière intervention
23 octobre 2012
- 23 oct. 2012 à 12:00
Bonjour a tous, j'ai un petit soucis sur la conversion d'un bout de code du c# au java
Donc j'ai :

PacketType.java
public enum PacketType
{
REQUEST((byte) 1),
RESPONSE((byte) 2);

private byte byteValue;

private PacketType(byte byteValue)
{
this.byteValue = byteValue;
}

public byte getPacketType()
{
return byteValue;
}

public void setPacketType(byte byteValue)
{
this.byteValue = byteValue;
}

public static PacketType getPacketTypeById(byte id)
{
for (PacketType type : values())
{
if (type.getPacketType() == id)
{
return type;
}
}
return null;
}
}


PacketDataType.java
public enum PacketDataType
{
PING((byte) 0),
LOGIN((byte) 1),
LOGINFAIL((byte) 2),
LOGOUT((byte) 3),
STATUSCHANGE((byte) 10),
BUDDYADD((byte) 31),
USERNOTFOUND((byte) 32),
AUTHORIZE((byte) 33),
GETBUDDYLIST((byte) 34),
BUDDYDELETE((byte) 35),
SENDMESSAGE((byte) 40);

private byte byteValue;

private PacketDataType(byte byteValue)
{
this.byteValue = byteValue;
}

public byte getPacketDataType()
{
return byteValue;
}

public void setPacketDataType(byte byteValue)
{
this.byteValue = byteValue;
}

public static PacketDataType getPacketDataTypeById(byte id)
{
for (PacketDataType type : values())
{
if (type.getPacketDataType() == id)
{
return type;
}
}
return null;
}
}


et ma fonction ou j ai un probleme :
public PacketDataType Command;
public PacketType Type;


public Packet()
{
Type = PacketType.REQUEST;
Command = PacketDataType.PING;

}

public byte[] toBytes()
{
int packetsize = 4;

if (Arguments != null && Arguments.length() > 0)
{
packetsize += 2 + Arguments.length();

}
byte[] data = new byte[packetsize];

data[0] = 0x6d;
data[1] = 0x70;
data[2] = (byte) Type; <##################################### Ici
data[3] = (byte) Command; <################################## Ici

if (Arguments != null && Arguments.length() > 0)
{
short argsize = (short) Arguments.length();
byte[] sizebytes = BitConverter.toBytes(argsize);

System.arraycopy(sizebytes, 0, data, 4, 2);

byte[] byArgs = null;
try
{
byArgs = Arguments.getBytes("US-ASCII");
}
catch (UnsupportedEncodingException e)
{
e.printStackTrace();
}
System.arraycopy(byArgs, 0, data, 6, argsize);
}
return data;
}


Donc sur le cast des mes enums j'ai une erreur 'Cannot cast from PacketDataType to byte' sous eclipse
Y'a t'il moyen en java de cast un enum?

en c# oui car le code si dessous fonctionne:
public byte[] ToBytes()
        {
            var packetsize = 4;

            if(!string.IsNullOrEmpty(m_sArguments))
            {
                packetsize += 2 + m_sArguments.Length;
            }

            var data = new byte[packetsize];

            data[0] = 0x6d;
            data[1] = 0x70;
            data[2] = (byte) Type;
            data[3] = (byte) Command;
            
            if(!string.IsNullOrEmpty(m_sArguments))
            {
                var argsize = (short) m_sArguments.Length;
                var sizebytes = BitConverter.GetBytes(argsize);

                Array.Copy(sizebytes, 0, data, 4, 2);

                var enc = new ASCIIEncoding();
                var byArgs = enc.GetBytes(m_sArguments);
                Array.Copy(byArgs, 0, data, 6, argsize);
            }

            return data;
        }
Afficher la suite 

Votre réponse

4 réponses

Meilleure réponse
Messages postés
519
Date d'inscription
mercredi 21 mars 2007
Statut
Membre
Dernière intervention
19 décembre 2016
25
3
Merci
Salut,

Julien39, relis-toi, tu as dû te lever du mauvais pied car tu es particulièrement condescendant.

Les var et string sont dans son code C#, qu'il a pris soin d'intégrer dans une balise code C#. Les enum ne sont pas si mal utilisés et je ne vois pas ce qui te fait dire qu'il n'utilises pas d'IDE.

Pour répondre à la question, tu ne peux pas faire un cast d'enum vers byte mais c'est inutile car tu peux faire :
data[2] = Type.getPacketType(), non ?

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 141 internautes nous ont dit merci ce mois-ci

Commenter la réponse de cs_jojolemariole
Messages postés
6449
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
17 mai 2018
279
0
Merci
Salut,

Tu n'as pas qu'un problème avec ton code, ce n'est pas du java :
string -> String (avec une majuscule)

var : ca n'existe pas en java

Je pense que tu ne sais pas ce qu'est un cast. Tu utilises mal les énums et surtout.

Tu n'utilises pas d'ide.

Je te conseil donc de télécharger éclipse (c'est gratos) et d'apprendre les bases du java. Là, dans ton code, tout est à jeter.
Commenter la réponse de cs_Julien39
Messages postés
6449
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
17 mai 2018
279
0
Merci
Salut,

Oups, mea culpa, j'ai lu le code C# et j'ai pensé que l'auteur cherchait en réalité quelqu'un pour faire la conversion à sa place.

Désolé.

a+
Commenter la réponse de cs_Julien39
Messages postés
22
Date d'inscription
jeudi 9 octobre 2008
Statut
Membre
Dernière intervention
23 octobre 2012
0
Merci
Effectivement avec le getter setter sa passe tout seul, je devais être très mal réveille hier, enfin merci pour vos réponses
Commenter la réponse de sheppertizer

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.