Je voudrais le write (dans un fichier) sur deux bytes.
Donc si je fais:
$> hexdump -C fd
>> 00 05
J'ai essayé de faire
write(fd, value, 2);
mais ca n'a pas vraiment de sens...
Du coup, je me suis dis que je devais décomposer la value en 2 parties et write ces deux parties. Cependant je ne comprends pas comment faire cette décomposition.
L'endiannes a de l'importance ou pas? Ou autrement dit, le fichier peut-il être lu par un processeur gérant l'ordre des octets de manière différente de celui du tien.
Du coup, je me suis dis que je devais décomposer la value en 2 parties et write ces deux parties. Cependant je ne comprends pas comment faire cette décomposition.
Si je comprend bien le byte de poids fort est toujours 0, donc tu écris 0, puis le byte de poids faible value. Il suffit d'inverser l'écriture si tu veux écrire en little indian
bonjour, en fait ta question est un peut ambigue, nous avons besoin de savoir qui doit lire le fichier obtenue et à quoi il va servir (en gros est-ce un humain qui va le lire ou bien une machine) ?
Si c'est un humain il suffit d'ecrire ce que tu veux dans un fichier texte comme ceci :
avec cette ligne ça écrira --dans un fichier texte-- l'hexa comme dans ton exemple. Par contre ce sera bien du texte et non pas un code binaire utilisable par ton PC !
Si c'est une machien alors tu veux ecrire du binaire --pas un text representant du binaire--, il va donc juste faloir ecrire les données avec un write :
write ( fd, data, size );
- Edité par ox223252 16 mai 2019 à 8:08:39
la connaissance est une chose qui ne nous appauvrit pas quand on la partage.
Si il s'agit de produire du texte formaté représentant une valeur en hexadécimal , il est plus simple d'utiliser le format %x, qui est fait pour.
Genre
printf("%02x", valeur);
0 pour avoir au besoin des zéros non significatifs, 2 pour le nombre de caractères
---
Sinon, il existe des fonctions dont le rôle est de représenter des nombres dans "l'ordre réseau", indépendamment de celui de la machine hôte.
Je traduis, la mode étant apparemment de write avec des words en english, il y a des fonctions de la lib qui servent à reverse les bytes d'un int if needed pour les write dans un file ou pour les socketter. Et le Network Byte Order, c'est big-endian, aka Most Signifiant Byte.
Elles portent sur des entiers de taille bien précises : 16 bits ou 32 bits non signées.
NAME htonl, htons, ntohl, ntohs - convert values between host and network byte order
SYNOPSIS #include <arpa/inet.h>
uint32_t htonl(uint32_t hostlong);
uint16_t htons(uint16_t hostshort);
uint32_t ntohl(uint32_t netlong);
uint16_t ntohs(uint16_t netshort);
Ici comme il y a deux bytes dans ton int il faut que tu choose les short.
Ho! miracle! J'ai découvert ce que veulent dire les noms (vive l'anglais):
htonl : Host to Network Long
ntohs : Network to Host Short
Merci Michel
Le Tout est souvent plus grand que la somme de ses parties.
Comment écrire une valeur hexa sur 2 bytes
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
Le Tout est souvent plus grand que la somme de ses parties.
la connaissance est une chose qui ne nous appauvrit pas quand on la partage.
Mon GitHub
Le Tout est souvent plus grand que la somme de ses parties.
Le Tout est souvent plus grand que la somme de ses parties.
Le Tout est souvent plus grand que la somme de ses parties.