Write/Read Bytes
iTom-c
Membre
Bonjour à tous et à toutes,
Alors voilà , je recherche un framework ou une classe comme il y a dans Java pour utiliser des fonctions comme :
writeString
writeByte
writeBytes
writeShort
writeInt
writeDouble
writeBoolean
et à l'inverse les lire aussi.
Par exemple j'ai ces 3 variables :
unsigned short int 7890 (base 10) => 1E D2 (base 16)
int 123456 => 00 01 E2 40
unsigned char 95 => 5F
J'ai besoin de créer la fonction représenté par => et à l'inverse <=
Le but final sera d'envoyer/recevoir une NSData (via un NSStream) contenant ces 3 variables donc : 1E D2 00 01 E2 40 5F
Alors voilà , je recherche un framework ou une classe comme il y a dans Java pour utiliser des fonctions comme :
writeString
writeByte
writeBytes
writeShort
writeInt
writeDouble
writeBoolean
et à l'inverse les lire aussi.
Par exemple j'ai ces 3 variables :
unsigned short int 7890 (base 10) => 1E D2 (base 16)
int 123456 => 00 01 E2 40
unsigned char 95 => 5F
J'ai besoin de créer la fonction représenté par => et à l'inverse <=
Le but final sera d'envoyer/recevoir une NSData (via un NSStream) contenant ces 3 variables donc : 1E D2 00 01 E2 40 5F
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
Tu trouveras sans doute les réponses à tes questions Dans le Binary Data Programming Guide
Après, je pense que tu confonds les données et sa représentation. 7890 et 0x1ED2 sont exactement la même chose. Quand tu veux envoyer des octets via un NSStream, tu envoies des octets, que toi sur le papier tu les écrives 7890 ou Ox1ED2 ça reste des octets. Tu n'envoies pas la chaà®ne "1ED2" (qui serait un stream composé des caractères/octets "1" puis "E" puis "D" puis "2"), tu envoies un octet de valeur 30, soit 0x1E en hexa, puis tu envoies l'octet de valeur 210 (soit 0xD2 si tu préfères la représentation hexa). Tu n'as pas à avoir une fonction qui convertit 7890 en 0x1ED2 vu que c'est la même chose en fait. Par contre tu veux une méthode qui décompose une donnée en sa représentation en octets (représentation BigEndian apparemment d'après ce que tu décris)
Donc en particulier pour ce que tu veux faire il suffit d'utiliser la classe NSMutableData et sa méthode appendBytes:length: :
Mais par exemple je ne comprend pas comment cela marche (en Java) :
Le packet envoyé sera 02 02 00 01 00 et c'est correct. Alors qu'en Objective-c :
Et la le packet envoyé sera 02 00 00 00 02 00 00 00 01 00 00 00 00 00 00 00.
Essayes avec des "char", il me semble que c'est ce que tu cherches ...
En fait je crois que une partie du problème vient de la différence entre le writeByte et le writeShort que je ne comprend pas.
Si tu veux ecrire un short
short int = 1;
[data appendBytes:&y length:sizeof(z)];
sur une machine 32 bits cela donne: char 1 short 2 int 4 long 4
Pour avoir des tailles déterminées, on peut utiliser :
Ce qui donne: char 1 short 2 int 4 long 8
On peut aussi vouloir définir les tailles soi-même: