Comment lire un "unsigned char" avec un format normal - C++ - Programmation
Marsh Posté le 26-03-2003 à 17:08:00
moi je vois pas de problème
Code :
|
fonctionne tres bien
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+
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"
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).
Marsh Posté le 26-03-2003 à 21:17:39
ReplyMarsh 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?
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 |
Oui, des bytes (pas octet !) à 9 bits.
Marsh Posté le 27-03-2003 à 02:46:59
ReplyMarsh Posté le 27-03-2003 à 02:50:47
kenshiro182 a écrit : |
byte c'est la traduction anglaise d'octet.
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.
Marsh Posté le 27-03-2003 à 03:01:55
wave 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
Marsh Posté le 27-03-2003 à 03:05:51
legreg 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.
Marsh Posté le 27-03-2003 à 03:15:25
wave a écrit : |
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
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. |
ça ne démontre en rien que octet != byte
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.
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!
Marsh Posté le 27-03-2003 à 10:53:36
Citation : Ca ne démontre en rien que octet != byte |
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
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: |
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
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
Marsh Posté le 27-03-2003 à 12:36:55
Citation : Il y a eu UNE info intéressante dans ce topic |
c'est bien ce que je pensais, ce qui t'intéresse c'est pas le sujet du topic.
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
Marsh Posté le 24-05-2010 à 17:24:05
Beau déterrage de topic
Tu devrais pouvoir t'en sortir comme ca :
Code :
|
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+