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 

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
21
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 200 internautes nous ont dit merci ce mois-ci

Commenter la réponse de cs_jojolemariole
Messages postés
6413
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
17 mai 2018
246
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
6413
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
17 mai 2018
246
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