Comment lire un "unsigned char" avec un format normal

Comment lire un "unsigned char" avec un format normal - C++ - Programmation

Marsh Posté le 26-03-2003 à 16:51:28    

bon alors les gars j'ai besoin d'aide!
Voilà
J'ai une structure de ce type
struct iaddr
{
   unsigned len;
   unsigned char iabuf[16];
}
voilà le truc c'est que je voudrais mettre du caractere normal comme par exemple "toto" dans iabuf. Mais si je fais un strcpy(iaddr.iabuf,"toto" ) et ben une fois que je fais un printf il me sors n'importe koi!
Alors bon c'est peut etre une histoire de cast mais comment on fais??
Merci de m'aider le plus rapidement possible les gars (et filles :) )
A+

Reply

Marsh Posté le 26-03-2003 à 16:51:28   

Reply

Marsh Posté le 26-03-2003 à 17:04:03    

up

Reply

Marsh Posté le 26-03-2003 à 17:08:00    

moi je vois pas de problème
 

Code :
  1. #include <stdio.h>
  2. #include <string.h>
  3. struct iaddr
  4. {
  5.   unsigned len;
  6.   unsigned char iabuf[16];
  7. };
  8. int main()
  9. {
  10.   struct iaddr ia;
  11.   strcpy((char*)ia.iabuf, "toto" );
  12.   puts((char*)ia.iabuf);
  13.   return 0;
  14. }

 
 
fonctionne tres bien

Reply

Marsh Posté le 26-03-2003 à 17:29:30    

merci de ta reponse mais:
je voudrais en fait que mon toto soit mis dans iaddr.iabuf en tant que unsigned char.
En gros, je crois crois que le unsigned char c'est de l'ASCII, donc faudrais inscrire la valeur en unsigned char de toto
 
voilà je sais pas si je suis clair
merci quand meme a+

Reply

Marsh Posté le 26-03-2003 à 17:32:53    

unsigned ou signed, ca reste un caractère. de toutes façons, les caractères ascii sont sur 7bits, donc sans doute meme representation en signed et unsigned
 
sans vouloir etre méchant, je dirais que ce topic est un cas flagrant de "masturbation intellectuelle de newbie"

Reply

Marsh Posté le 26-03-2003 à 17:56:11    

signed ou unsigned, un char c'est 8 bits.
Le signe change simplement la manière dont on interprête le nombre quand on fait des opérations arithmétiques dessus.
Les strcpy() et printf() ne font pas d'opérations arithmétiques, mais de la bête copie d'octet sans se préoccuper de leur contenu (sauf de la valeur '0' qui sert de drapeau de fin et qui est codée de la même manière en signed ou unsigned).

Reply

Marsh Posté le 26-03-2003 à 21:17:39    

wave a écrit :

signed ou unsigned, un char c'est 8 bits.

faux

Reply

Marsh Posté le 26-03-2003 à 22:27:26    

une variable de type (char) en C fait une taille d'un octet, ou 8 bits
 
existe-t-il un système suffisament vicieux pour faire autrement?

Reply

Marsh Posté le 26-03-2003 à 22:42:25    

muad_dib a écrit :

une variable de type (char) en C fait une taille d'un octet, ou 8 bits
existe-t-il un système suffisament vicieux pour faire autrement?


Oui, des bytes (pas octet !) à 9 bits.

Reply

Marsh Posté le 27-03-2003 à 02:46:59    


c'est à dire?
me dis pas qu'il existe des compilos où ça fait 16 bits?

Reply

Marsh Posté le 27-03-2003 à 02:46:59   

Reply

Marsh Posté le 27-03-2003 à 02:50:47    

kenshiro182 a écrit :


Oui, des bytes (pas octet !) à 9 bits.


byte c'est la traduction anglaise d'octet.

Reply

Marsh Posté le 27-03-2003 à 03:00:36    

wave a écrit :

me dis pas qu'il existe des compilos où ça fait 16 bits?


 
Peut-être ! Mais je ne crois pas que ce soit lié au compilo mais à la machine. En effet sur certaines machines, il est plus "pratique" (je ne peux pas t'en dire plus) de définir les char comme ne faisant pas 8 bits. J'ai entendu parler déjà de systèmes où les chars faisaient 7 bits et d'autres où ils faisaient 12 bits.
 
Par contre, si je me souviens bien, le standard C définit les char comme devant faire au minimum 7 bits. De son côté le standard POSIX dit qu'un char doit faire 8 bits (voir ce lien).
 
Bon, je ne suis clairement pas un expert dans ce domaine donc j'ai pu me tromper. D'ailleurs, j'en profite pour faire de la pub pour une question que j'avais posée il y a bien longtemps et qui n'a pas rencontré un franc succès.


---------------
each day I don't die is cheating
Reply

Marsh Posté le 27-03-2003 à 03:01:55    

wave a écrit :


byte c'est la traduction anglaise d'octet.


 
pas exactement, le mot "octet" existe aussi en anglais
mais est peu couramment utilisé pour designer un octet.
 
Le mot byte d'origine incertaine : certains disent "by eight" ou un acronyme quelconque qui joue a la fois sur le son "bite" ou morceau arraché par une morsure ou une bouchée et le terme bit qui désignait le chiffre binaire. Mais il désigne de toute façon l'élément adressable de base qui peut faire 7 ou 9 bits.
 
En français pour tenir compte de cette nuance on emploie parfois le mot multiplet (qui existe aussi en anglais mais qui n'est jamais utilisé en informatique).
 
A+
LeGreg


---------------
voxel terrain render engine | animation mentor
Reply

Marsh Posté le 27-03-2003 à 03:05:51    

legreg a écrit :


 
pas exactement, le mot "octet" existe aussi en anglais
mais est peu couramment utilisé pour designer un octet.
 
Le mot byte d'origine incertaine : certains disent "by eight" ou un acronyme quelconque qui joue a la fois sur le son "bite" ou morceau arraché par une morsure ou une bouchée et le terme bit qui désignait le chiffre binaire. Mais il désigne de toute façon l'élément adressable de base qui peut faire 7 ou 9 bits.
 
En français pour tenir compte de cette nuance on emploie parfois le mot multiplet (qui existe aussi en anglais mais qui n'est jamais utilisé en informatique).
 
A+
LeGreg


il faut vraiment être tordu (je parle pas de toi:D) pour qu'un byte ne désigne pas un octet. C'est ce qui est utilisé couremment comme traduction, si on veut un autre sens (sauf pour une pub mensongère:D), il faut employer un autre mot.

Reply

Marsh Posté le 27-03-2003 à 03:15:25    

wave a écrit :


il faut vraiment être tordu (je parle pas de toi:D) pour qu'un byte ne désigne pas un octet. C'est ce qui est utilisé couremment comme traduction, si on veut un autre sens (sauf pour une pub mensongère:D), il faut employer un autre mot.


 
Qui t'a dit que byte etait la traduction d'octet??
Faut arreter d'etre ethnocentré (pas trouve d'autre mot)
et pas tout confondre.
 
Le fait que C appelle ses bytes char, montre bien qu'il peut y avoir une concordance locale mais que ce n'est pas pour autant qu'on a similarité totale. En C, un char est un byte, en java, un byte fait 8 bits et un char fait 16 bits puisque pour java un caractère est forcément unicode.
 
Donc char != octet != byte
meme si localement (dans une norme comme Posix ou celle de java) tu peux avoir byte == octet ou byte == char
ce n'est pas pour autant que c'est la même chose.
Et le fait de devoir préciser qu'on a l'égalité montre bien qu'on n'a pas identité des concepts.
 
LeGreg


---------------
voxel terrain render engine | animation mentor
Reply

Marsh Posté le 27-03-2003 à 03:32:32    

Citation :

Qui t'a dit que byte etait la traduction d'octet??


va voir n'importe quel site de hardware en anglais:lol:
les barettes de RAM, le cache du cpu, la taille des disques durs, pour tout ça on met 'byte' en anglais là où on met 'octet' en français.
 

Citation :

Le fait que C appelle ses bytes char, montre bien qu'il peut y avoir une concordance locale mais que ce n'est pas pour autant qu'on a similarité totale. En C, un char est un byte, en java, un byte fait 8 bits et un char fait 16 bits puisque pour java un caractère est forcément unicode.  
 
Donc char != octet != byte


ça ne démontre en rien que octet != byte:D
et je vois pas trop ce que le java vient faire ici, on parle de C.
PS: un typedef ne peut redéfinir le mot 'byte' que pour un compilateur, ni dans le dictionnaire, ni dans le langage que les gens parlent.

Reply

Marsh Posté le 27-03-2003 à 08:55:19    

par abus de langage, on utilise le mot byte pour signifier 8 bits mais en fait un byte est un regroupement d'un nombre quelconque de bits.
Tantdis que le mot octet, lui est utilise pour denommer un groupe de 8 bits. (OCTet)
 
C'est comme ca et pis c'est tout!


Message édité par polo021 le 27-03-2003 à 08:56:25
Reply

Marsh Posté le 27-03-2003 à 10:53:36    

Citation :

Ca ne démontre en rien que octet != byte:D
et je vois pas trop ce que le java vient faire ici, on parle de C.
PS: un typedef ne peut redéfinir le mot 'byte' que pour un compilateur, ni dans le dictionnaire, ni dans le langage que les gens parlent.


 
Oui mais les gens ont tort.
Ils disent "quand à moi" ou "comme même"
ce qui ne veut rien dire. Il suffit qu'ils entendent
un journaliste dire une connerie au 20 heures
pour qu'ils la répètent.
Et la plupart des français ignorent l'existence
du mot "byte" et sa signification réelle, ne parlons pas du dictionnaire.  
 
Et tu parles de C, mais en C le mot clé byte n'existe pas:
il y a des chars, et un char ne vaut un byte qu'en C et que parce que les créateurs du C l'ont décidé et non pas parce que c'est la même chose. Et il y a des machines ou un byte ne fait pas 8 bits.
 
C'est quoi cette manie de tout vouloir simplifier..
 
LeGreg


---------------
voxel terrain render engine | animation mentor
Reply

Marsh Posté le 27-03-2003 à 11:31:32    

Citation :

Et tu parles de C, mais en C le mot clé byte n'existe pas:  
il y a des chars, et un char ne vaut un byte qu'en C et que parce que les créateurs du C l'ont décidé et non pas parce que c'est la même chose.


t'as un autre but que de me contredire?:lol:
Si les créateurs du C ont décidé qu'un char vaut un byte, en français ça veut dire que dans le cas qui nous concerne, byte=char.
Tant que tu y est, tu peux aussi rappeler que dans l'armée, char=tank!=byte, ça nous aidera vachement!:lol:
 
Et puis j'ajoute qu'à mon avis la question du topic concerne une machine sur laquelle un byte fait 8 bits donc un octet, même si on accepte le principe que byte n'est pas la traduction d'octet (à vérifier, c'est courant que quelques spécialistes utilisent un mot à leur manière, ça ne suffit pas à changer sa définition académique).
Alors il faut savoir si on aide la personne qui pose une question ou si on l'embrouille avec des notions très rares qui ne concernent pas sa machine.
Trouve-moi des gens qui programment (en C) sur PC/mac/station de travail quelconque, en faisant en sorte que le programme puisse tourner sur une machine où un char ne fait pas 8 bits:D

Reply

Marsh Posté le 27-03-2003 à 12:22:46    

Citation :

Alors il faut savoir si on aide la personne qui pose une question ou si on l'embrouille avec des notions très rares qui ne concernent pas sa machine.


 
Je ne discute pas avec la personne qui a poste le poste originalement, je venais juste apporter un soutien à ceux qui disaient que byte n'etait pas toujours un octet et que ces deux mots n'etaient pas traduction litterale l'un de l'autre.
 

Citation :

t'as un autre but que de me contredire?:lol:


 
Je ne cherche pas a te contredire.
Il y a eu UNE info intéressante dans ce topic
c'est qu'un byte pour un anglais était plus proche de la traduction d'un multiplet puisque l'anglais désigne par byte des choses qui ne font pas 8 bits.
Mais apparemment tu es passé à coté.
 
LeGreg


---------------
voxel terrain render engine | animation mentor
Reply

Marsh Posté le 27-03-2003 à 12:36:55    

Citation :

Il y a eu UNE info intéressante dans ce topic
c'est qu'un byte pour un anglais était plus proche de la traduction d'un multiplet puisque l'anglais désigne par byte des choses qui ne font pas 8 bits.
Mais apparemment tu es passé à coté.


c'est bien ce que je pensais, ce qui t'intéresse c'est pas le sujet du topic.

Reply

Marsh Posté le 23-05-2010 à 13:43:31    

bonjour ,
 
je développe sous C++, je veux afficher les éléments d'un tableau dans un textbox  
voici mon tableau :
unsigned char INBuffer[65];  
pour afficher l'élément 2 dans le textbox :
textBox1->Text = INBuffer[2].ToString();  
     
il m'affiche dans le text box 42 (par exemple)  au lieu d' " * " qui se trouve dans la case 2 de  INBuffer.  
SVP c'est urgent comment je transforme la valeur Decimale ("42" )en Valeur ASCII( *),dans mon textbox  
Merci d'avance  
 

Reply

Marsh Posté le 24-05-2010 à 17:24:05    

Beau déterrage de topic  :D  
 
Tu devrais pouvoir t'en sortir comme ca :
 

Code :
  1. cli::array<unsigned char>^ caracteres = { INBuffer[2] };
  2. textBox1->Text = System::Text::ASCIIEncoding::ASCII->GetString(caracteres);

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed