ASCII en java
Résolu/Fermé
mariostar27
Messages postés
391
Date d'inscription
mercredi 17 juin 2009
Statut
Membre
Dernière intervention
21 août 2015
-
5 mars 2010 à 17:19
mariostar27 Messages postés 391 Date d'inscription mercredi 17 juin 2009 Statut Membre Dernière intervention 21 août 2015 - 11 mars 2010 à 11:48
mariostar27 Messages postés 391 Date d'inscription mercredi 17 juin 2009 Statut Membre Dernière intervention 21 août 2015 - 11 mars 2010 à 11:48
A voir également:
- ASCII en java
- Caractère ascii - Guide
- Waptrick java football - Télécharger - Jeux vidéo
- Jeux java itel football - Télécharger - Jeux vidéo
- Java apk - Télécharger - Langages
- Java décompiler - Télécharger - Langages
9 réponses
mariostar27
Messages postés
391
Date d'inscription
mercredi 17 juin 2009
Statut
Membre
Dernière intervention
21 août 2015
26
5 mars 2010 à 17:47
5 mars 2010 à 17:47
voici mon code :
Client c = new Client();
Socket socket;
BufferedReader in;
PrintWriter out;
try {
String str = "texte à transformer";
byte tab[] = new byte[255];
socket = new Socket("192.168.0.111",2000);
System.out.println("connexion");
out = new PrintWriter(socket.getOutputStream());
out.println(tab);
out.flush();
socket.close();
Client c = new Client();
Socket socket;
BufferedReader in;
PrintWriter out;
try {
String str = "texte à transformer";
byte tab[] = new byte[255];
socket = new Socket("192.168.0.111",2000);
System.out.println("connexion");
out = new PrintWriter(socket.getOutputStream());
out.println(tab);
out.flush();
socket.close();
kij_82
Messages postés
4089
Date d'inscription
jeudi 7 avril 2005
Statut
Contributeur
Dernière intervention
30 septembre 2013
857
5 mars 2010 à 18:09
5 mars 2010 à 18:09
Bonjour,
Alors c'est plutôt simple dans ton cas, il te suffit d'invoquer la méthode 'getBytes' sur ta chaine de caractère de la façon suivante:
Ceci te permet alors de te dégager de ton tableau de bytes dont la longueur est fixe (quand bien même tu aurais pu coder cela de manière à le rendre dynamique).
A savoir qu'en Java, toute chaine de caractère est représenter en UTF-16 (en interne à Java).
Si à l'avenir tu travailles sur autre chose que de l'ASCII, je te conseille fortement de travailler / lire ta données via des tableaux de byte plutôt que des String.
En espérant que cela puisse t'aider.
Cdlt.
Alors c'est plutôt simple dans ton cas, il te suffit d'invoquer la méthode 'getBytes' sur ta chaine de caractère de la façon suivante:
String str = "texte à transformer"; out.println(str.getBytes());
Ceci te permet alors de te dégager de ton tableau de bytes dont la longueur est fixe (quand bien même tu aurais pu coder cela de manière à le rendre dynamique).
A savoir qu'en Java, toute chaine de caractère est représenter en UTF-16 (en interne à Java).
Si à l'avenir tu travailles sur autre chose que de l'ASCII, je te conseille fortement de travailler / lire ta données via des tableaux de byte plutôt que des String.
En espérant que cela puisse t'aider.
Cdlt.
mariostar27
Messages postés
391
Date d'inscription
mercredi 17 juin 2009
Statut
Membre
Dernière intervention
21 août 2015
26
7 mars 2010 à 20:13
7 mars 2010 à 20:13
disons que je commence seulement a voir les byte en java donc...
j'ai un projet qui consiste a envoyé des trames sur le réseau. si vous pouvez m'aidez svp.
genre j'ai une trame du genre STX 001 GS 001 GS bonjour ETX
donc je suppose que, cette chaine de caractère "bonjour" doit être transformé en un tableau de byte. comment faire pour cela ??? j'ouvre un socket a l'adresse IP et le port voulu, puis j'envoie mon tableau de byte ???
pouvez vous me donné un exemple de code svp.
j'ai un projet qui consiste a envoyé des trames sur le réseau. si vous pouvez m'aidez svp.
genre j'ai une trame du genre STX 001 GS 001 GS bonjour ETX
donc je suppose que, cette chaine de caractère "bonjour" doit être transformé en un tableau de byte. comment faire pour cela ??? j'ouvre un socket a l'adresse IP et le port voulu, puis j'envoie mon tableau de byte ???
pouvez vous me donné un exemple de code svp.
kij_82
Messages postés
4089
Date d'inscription
jeudi 7 avril 2005
Statut
Contributeur
Dernière intervention
30 septembre 2013
857
8 mars 2010 à 13:45
8 mars 2010 à 13:45
Bonjour,
Je crois t'avoir donné la façon d'écrire ta chaine de caractère sous forme d'un tableau de byte dans mon post précédent.
A toi d'adapter ce code au tiens, ce qui n'est pas difficile.
Je crois t'avoir donné la façon d'écrire ta chaine de caractère sous forme d'un tableau de byte dans mon post précédent.
A toi d'adapter ce code au tiens, ce qui n'est pas difficile.
mariostar27
Messages postés
391
Date d'inscription
mercredi 17 juin 2009
Statut
Membre
Dernière intervention
21 août 2015
26
9 mars 2010 à 17:20
9 mars 2010 à 17:20
bon très bien. maintenant autre problème, celui des STX, GS, etc.
si je fais :
String str = "STX 111 GS 001 GS bonjour ETX";
byte[] tab = str.getByte();
dans mon tableau j'aurais le STX, GS et ETX transformé lettre par lettre alors que je dois avoir 0x02 pour STX et pas 0x53 0x54 0x58. enfin, tu vois mon problème.
si je fais :
String str = "STX 111 GS 001 GS bonjour ETX";
byte[] tab = str.getByte();
dans mon tableau j'aurais le STX, GS et ETX transformé lettre par lettre alors que je dois avoir 0x02 pour STX et pas 0x53 0x54 0x58. enfin, tu vois mon problème.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
kij_82
Messages postés
4089
Date d'inscription
jeudi 7 avril 2005
Statut
Contributeur
Dernière intervention
30 septembre 2013
857
9 mars 2010 à 17:57
9 mars 2010 à 17:57
Non je ne vois pas du tout ton problème.
A quoi correspondent exactement les données / informations STX, 111, GS, 001 et ETX ?
Si tu me dis que tu veux avoir la valeur héxadécimale '0x02' en sortie à la place de STX, c'est donc que STX n'est pas une chaine de caractère. Qu'est-ce donc ? Est-ce que tu ne ferai pas un mélange d'autre type de code ?
Regarde par ici, des fois que ça puisse t'éclairer sur les communications:
https://www.oracle.com/java/technologies/jpl2-socket-communication.html
A quoi correspondent exactement les données / informations STX, 111, GS, 001 et ETX ?
Si tu me dis que tu veux avoir la valeur héxadécimale '0x02' en sortie à la place de STX, c'est donc que STX n'est pas une chaine de caractère. Qu'est-ce donc ? Est-ce que tu ne ferai pas un mélange d'autre type de code ?
Regarde par ici, des fois que ça puisse t'éclairer sur les communications:
https://www.oracle.com/java/technologies/jpl2-socket-communication.html
mariostar27
Messages postés
391
Date d'inscription
mercredi 17 juin 2009
Statut
Membre
Dernière intervention
21 août 2015
26
11 mars 2010 à 08:39
11 mars 2010 à 08:39
STX = start of Texte
111 = adresse de l'afficheur concerné
GS = group séparator
001 = numero du massage a affiché.
ETX = end of text.
c'est pour un afficheur. se que je vien de te donné se situe dans le tableau ascii
111 = adresse de l'afficheur concerné
GS = group séparator
001 = numero du massage a affiché.
ETX = end of text.
c'est pour un afficheur. se que je vien de te donné se situe dans le tableau ascii
mariostar27
Messages postés
391
Date d'inscription
mercredi 17 juin 2009
Statut
Membre
Dernière intervention
21 août 2015
26
11 mars 2010 à 08:44
11 mars 2010 à 08:44
j'ai éssayé ca :
byte[] tab = {0X01, 0X31, 0X31, 0X31, 0X1D, 0X30, 0X30, 0X31, 0X04};
out = new PrintWriter(socket.getOutputStream());
out.println(tab);
mais cela ne fonctionne pas.
byte[] tab = {0X01, 0X31, 0X31, 0X31, 0X1D, 0X30, 0X30, 0X31, 0X04};
out = new PrintWriter(socket.getOutputStream());
out.println(tab);
mais cela ne fonctionne pas.
mariostar27
Messages postés
391
Date d'inscription
mercredi 17 juin 2009
Statut
Membre
Dernière intervention
21 août 2015
26
11 mars 2010 à 10:21
11 mars 2010 à 10:21
j'ai changer mon code, voici :
public static void main(String[] zero) {
try {
Socket socket;
OutputStream out;
socket = new Socket("192.168.0.111", 2000);
byte[] tab = {0X01, 0X31, 0X31, 0X31, 0X1D, 0X30, 0X30, 0X31, 0X04};
System.out.println("Demande de connexion");
out = new DataOutputStream(socket.getOutputStream());
out.write(tab);
out.flush();
socket.close();
} catch (IOException ex) {
Logger.getLogger(TestAfficheur.class.getName()).log(Level.SEVERE, null, ex);
}
}
j'ai changer le printWriter en DataOutputStream. et le println en write.
avec ethereal (wireshark), j'ai regardé les trame circulant entre mon afficheur et moi (sur le port 2000).
je peux voir quelque erreur :
Transmission Control Protocol, src Port : 36590 (36590), Dst Port: cisco-sccp (2000), seq: 1, Ack: 1, Len: 9
Source port: 36590
Destination port: cisco-cssp (2000)
...
Chechsum: 0x8222 [incorrect, should be 0xdf33 (maybe caused by "TCP checksum offload"?)]
[good Checksum: false]
[bad Checksum: true]
je ne vois pas trop de quoi il parle. le saviez-vous ???
merci à toi kij_82
public static void main(String[] zero) {
try {
Socket socket;
OutputStream out;
socket = new Socket("192.168.0.111", 2000);
byte[] tab = {0X01, 0X31, 0X31, 0X31, 0X1D, 0X30, 0X30, 0X31, 0X04};
System.out.println("Demande de connexion");
out = new DataOutputStream(socket.getOutputStream());
out.write(tab);
out.flush();
socket.close();
} catch (IOException ex) {
Logger.getLogger(TestAfficheur.class.getName()).log(Level.SEVERE, null, ex);
}
}
j'ai changer le printWriter en DataOutputStream. et le println en write.
avec ethereal (wireshark), j'ai regardé les trame circulant entre mon afficheur et moi (sur le port 2000).
je peux voir quelque erreur :
Transmission Control Protocol, src Port : 36590 (36590), Dst Port: cisco-sccp (2000), seq: 1, Ack: 1, Len: 9
Source port: 36590
Destination port: cisco-cssp (2000)
...
Chechsum: 0x8222 [incorrect, should be 0xdf33 (maybe caused by "TCP checksum offload"?)]
[good Checksum: false]
[bad Checksum: true]
je ne vois pas trop de quoi il parle. le saviez-vous ???
merci à toi kij_82
mariostar27
Messages postés
391
Date d'inscription
mercredi 17 juin 2009
Statut
Membre
Dernière intervention
21 août 2015
26
11 mars 2010 à 11:48
11 mars 2010 à 11:48
d'ailleur se code fonctionne. merci a toi kij_82