2009-08-17 7 views
1

Voici mon scénario. J'ai une application écrite en C++ mais pas la source complète mais la "viande" est là. J'ai aussi un exe compilé de cette application. Il communique avec un serveur quelque part ici sur notre réseau. J'essaye de reproduire le code C++ dans java, mais il utilise dwords et les références de mémoire, sizeof etc., toutes les choses qui n'existent pas dans Java car il gère sa propre mémoire. Il construit ce grand message complexe et l'envoie ensuite sur le réseau. Donc, je suis en train de renifler le trafic et d'inspecter le paquet et d'essayer de coder en dur les données qu'il envoie pour voir si je peux obtenir une réponse du serveur de cette façon. Cependant, je n'arrive pas à reproduire parfaitement le message. Certains d'entre eux, comme le code de licence qu'il envoie, sont en "hexagone clair", c'est-à-dire hexadécimal qui se traduit en ascii, où - comme d'autres portions de données ne sont pas des "hexagones" tels que "aa" traduire en ascii (ou au moins un jeu de caractères commun? Si cela a un sens, je ne suis pas sûr).Conversion CPP en Java

Idéalement, je ne voudrais pas le faire comme ça, mais c'est un tremplin pour voir si le serveur peut me répondre. L'une des fonctions est que l'application s'enregistre et c'est celle que j'essaie de reproduire.

Certaines de mes hypothèses ci-dessus peuvent être fausses, donc je m'excuse à l'avance. Merci pour votre temps.

Répondre

2

En Java, toutes les données "caractère" sont codées en Unicode (et non en ASCII). Donc, quand vous parlez de quelque chose à l'extérieur, vous devez cartographier les chaînes internes au monde extérieur. Il existe plusieurs façons de le faire:

  1. Utilisez un ByteArrayOutputStream. C'est essentiellement un tampon croissant d'octets auquel vous pouvez ajouter. Cela vous permet de créer le message en utilisant des octets.

  2. Utilisez getBytes(encoding) où le codage est le codage que l'autre partie comprend. Dans votre cas, ce serait "ASCII" pour les parties de texte.

Dans votre cas, vous avez probablement besoin des deux. Créez un tampon d'octets, puis ajoutez-y des chaînes et des octets, puis envoyez le résultat final (getByteArray()) via l'API socket.

+0

Salut merci, ça a l'air de bien fonctionner. Alternativement comme j'attendais sur une réponse j'étais capable de créer un tableau de caractères et vous pouvez représenter des caractères en utilisant 0x ?? où ?? peut être n'importe quelle valeur hexadécimale, ainsi j'ai pu utiliser "aa" ici et l'avoir représenter la valeur que j'essayais de reproduire. Cependant, votre réponse est évidemment plus appropriée à partir d'une approche lisible/programmatique. Merci beaucoup. – ckelner

+0

En Java "char"! = "Byte" (contrairement à C). Vous pouvez créer un tableau d'octets [] mais alors, vous devrez prendre soin de la position actuelle, etc. –