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
Bonjour,
voila je dois envoyer des trames a un aficheur.
pour cela, je doit envoyé un tableau de byte ( j'ai fais : byte tab[] = new byte[255] )
mais comment transformer un string ( ou un char pour faire lettre par lettre ce qui serait plus simple ) en ASCII puis l'inserer dans ce tableau de byte?
merci d'avance
A voir également:

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
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();
0
kij_82 Messages postés 4088 Date d'inscription jeudi 7 avril 2005 Statut Contributeur Dernière intervention 30 septembre 2013 857
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:

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.
0
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
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.
0
kij_82 Messages postés 4088 Date d'inscription jeudi 7 avril 2005 Statut Contributeur Dernière intervention 30 septembre 2013 857
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.
0
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
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.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
kij_82 Messages postés 4088 Date d'inscription jeudi 7 avril 2005 Statut Contributeur Dernière intervention 30 septembre 2013 857
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
0
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
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
0
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
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.
0
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
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
0
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
d'ailleur se code fonctionne. merci a toi kij_82
0