Pollux (./806) :
Le C, mais de toute façon je vois pas le pb... Chaîne de caractère != bloc de données binaires.
Bouarf ! Des chaînes avec un demi-caractère au bout ?

(c'est super, l'ensemble des caractères d'une chaîne n'est pas stable par SREV)
c'est de l'obfuscation mais pas du cryptage
Ben non, une chaîne c'est fait pour contenir des caractères, ça n'a rien à voir avec des données binaires ^^ (une chaîne de caractère, c'est conçu principalement pour la lecture séquentielle
un XOR entre des chaînes ? quelle idée saugrenue, ça n'a aucun sens de calculer ώ XOR Љ
Hippopotame (./823) :Pollux (./806) :
Le C, mais de toute façon je vois pas le pb... Chaîne de caractère != bloc de données binaires.
Pourquoi? Pour compliquer?Bon, certes, il est normal que chaînes de caractères et données binaires soient des types différents, mais ces types devraient être compatibles.
Bouarf ! Des chaînes avec un demi-caractère au bout ?
Ben ouais, c'est rigolo !(Quel rabat-joie, ce Pollux)

(c'est super, l'ensemble des caractères d'une chaîne n'est pas stable par SREVBah, si.)
c'est de l'obfuscation mais pas du cryptageNan mais je dis pas le contraire, mais c'est marrant pour les collégiens ^^

Ben non, une chaîne c'est fait pour contenir des caractères, ça n'a rien à voir avec des données binaires ^^ (une chaîne de caractère, c'est conçu principalement pour la lecture séquentielle
La fonction créé l'organe, toussa : c'est ce avec quoi on t'a bourré le mou depuis tout petit.
Pourtant, les éditeurs de texte brut (donc éditeurs de chaîne de caractères, moralement), se sentent obligés de pouvoir ouvrir un fichier avec des \00.
En FORTH, une chaîne de caractère, c'est un pointeur de début et une longueur, et c'est tout !

un XOR entre des chaînes ? quelle idée saugrenue, ça n'a aucun sens de calculer ώ XOR ЉBen là ça n'a pas de sens parce que les données binaires n'ont pas la même longueur, banane ! (ou alors elles ont la même longueur? Ben alors ça a un sens !)
Pollux (./824) :
Oui, transformer une chaîne de caractère en bloc binaire est une opération légitime (encore faut-il préciser l'encodage...),
J'ai pas dit que c'était pas rigolo, juste que ct pas propre
"ABC<demi caractère>" SREV => "<demi caractère>CBA"
Parce qu'ils ne sont pas fait que pour ouvrir des textes ; c'est parfois utile de pouvoir ouvrir un fichier binaire avec un éditeur de texte.
FORTH supporte unicode ?
Justement, quelle est la longueur d'un caractère ?
Hippopotame (./827) :Pollux (./824) :Brèfle : les chaînes de caractères dont tu parles sont de plus haut niveau que celles dont je parle. Les tiennes sont des objets plus riches, avec par exemple une information d'encodage en plus. On ne parle pas de la même chose.
Oui, transformer une chaîne de caractère en bloc binaire est une opération légitime (encore faut-il préciser l'encodage...),
"ABC<demi caractère>" SREV => "<demi caractère>CBA"Non.
Parce qu'ils ne sont pas fait que pour ouvrir des textes ; c'est parfois utile de pouvoir ouvrir un fichier binaire avec un éditeur de texte.Parce que moralement, binaires et texte c'est la même chose : n'essaie pas de noyer le poisson.
FORTH supporte unicode ?Ben FORTH peut supporter unicode si on écrit les routines pour.
)Justement, quelle est la longueur d'un caractère ?
Ben ça dépend, tu l'as dit toi même !Et ça n'a aucun rapport avec la question.
Hippopotame (./827) :Pollux (./824) :Brèfle : les chaînes de caractères dont tu parles sont de plus haut niveau que celles dont je parle. Les tiennes sont des objets plus riches, avec par exemple une information d'encodage en plus. On ne parle pas de la même chose.
Oui, transformer une chaîne de caractère en bloc binaire est une opération légitime (encore faut-il préciser l'encodage...),
Donc l'ensemble des caractères n'est pas stable par SREV.
Non, les fichier "plain text" sont un sous-ensemble des fichiers binaires. Par exemple un fichier UTF-8 mal encodé, ou un fichier UTF-32 contenant des caractères invalides (au sens d'unicode) ne sont pas des fichiers "plain text".
Ca s'appelle "ne pas supporter unicode" (en tout cas pour les chaînes standard). Tu ne peux pas créer le caractère n°4242, et les caractères sont tous entre 0 et 255
Ben alors pourquoi est-ce que ça aurait une influence sur la validité ou non du XOR ?
Hippopotame (./829) :Donc l'ensemble des caractères n'est pas stable par SREV.
Ah d'accord, je vois ce que tu veux dire. Effectivement SREV renverse les octets, pas les caractères multi-octets. (sur HP il n'y a pas de caractère multi-octet, certes, en revanche il y a des caractères de contrôle pour faire du texte formaté (italique, souligné, etc...). Il se trouve que SREV respecte ce formatage, mais c'est un hasard (ces caractères de contrôles sont placés de façon symétrique, pour écrire du texte en italique ça donne : "\13\02\13 texte... \13\02\13").
Bon, mais de toute façon, il ne faut pas prendre la commande SREV au sérieux : elle ne fait pas partie des commandes principales dont l'usager non averti se sert, elle fait partie de la librairie 256 des commandes de bidouillage de bas niveau, sa présence se justifie pour travailler facilement avec ce saturn qui lit et écrit à l'envers.
Non, les fichier "plain text" sont un sous-ensemble des fichiers binaires. Par exemple un fichier UTF-8 mal encodé, ou un fichier UTF-32 contenant des caractères invalides (au sens d'unicode) ne sont pas des fichiers "plain text".Menfou des plain text, je te parle des string en général (c'est à dire des chaînes d'octets, grosso modo).
Ca s'appelle "ne pas supporter unicode" (en tout cas pour les chaînes standard). Tu ne peux pas créer le caractère n°4242, et les caractères sont tous entre 0 et 255Euh, ben si, tu écris 4242 avec le préfixe qui va bien, chais plus le format. Où est le problème.
Ben alors pourquoi est-ce que ça aurait une influence sur la validité ou non du XOR ?
ben ça n'en a aucune, justement. C'est pas la longueur des caractères qui compte, c'est la taille de la chaîne.
Pollux (./830) :
Euh je parlais pas de ça, je parlais des demi-octets (tu disais que c'était parfaitement propre d'avoir des chaînes de 3.5 caractères, ça prouve que non)
J'ai parlé de SREV, mais c'est pareil pour la concaténation : l'ensemble des caractères n'est pas additif par concaténation pour les chaînes de longueur non-entière ^^
Lis ce à quoi je répondais, tu ne parlais pas de string mais de fichiers texte ^^
la longueur d'une chaîne n'est pas la longueur de sa représentation binaire...
gni ? tu veux dire que, si tu encodes l'unicode en HTML, "&
12345;" XOR "bonjour" est bien défini et que "&12345;" XOR "a" ne l'est pas ?
Hippopotame (./831) :Pollux (./830) :
Euh je parlais pas de ça, je parlais des demi-octets (tu disais que c'était parfaitement propre d'avoir des chaînes de 3.5 caractères, ça prouve que non)
D'abord ça "prouve" rien du tout. (Qu'est ce qui prouverait quoi???)Ensuite tu m'entraînes vers des problématiques inintéressantes : au fond je ne veux pas dire que c'est "parfaitement propre", je m'en fous, je dis juste que c'est une conséquence rigolote du fait qu'on a une puce 4 bits, et que ça ne pose pas de problème sauf pour les psychorigides.
Lis ce à quoi je répondais, tu ne parlais pas de string mais de fichiers texte ^^
Je te parlais des éditeurs de texte qui, ô joie, acceptent les \00.
Et de toute façon, un fichier texte (ou pas texte) c'est une chaîne d'octets donc une chaîne de caractères.
la longueur d'une chaîne n'est pas la longueur de sa représentation binaire...
Ben oui, t'as deux notions de longueur, quelle surprise !Je ne comprends pas ton émerveillement...
gni ? tu veux dire que, si tu encodes l'unicode en HTML, "&Ben c'est assez clair, non, tu sais compter quand même?
12345;" XOR "bonjour" est bien défini et que "&12345;" XOR "a" ne l'est pas ?
Plutôt que de se faire des noeuds dans la tête avec ces chaînes, pour justifier cette connerie de chaines AZT, les programmeurs en C auraient mieux fait de séparer clairement les types entiers et flottants !

Pollux (./833) :
Moi je dis simplement que, si tu sors du modèle ASCII pur (0<=caractère<255) il n'y a pas d'isomorphisme satisfaisant entre chaînes de caractères et chaînes binaires (i.e. qui ne casse pas des propriétés importantes des chaînes de caractères)
Une chaîne d'octets, oui, une chaîne de caractères, ça dépend de l'encodage...
Mais on s'en fout de la longueur binaire de la chaîne ou bien de la position binaire d'un caractère...
C'est pas clair du tout et surtout ça fait n'importe quoi : tu dois abandonner au moins une de ces propriétés :
- le XOR de 2 chaînes valides est tjs une chaîne valide
- la concaténation de 2 chaînes a et b, où a a une longueur de n caractères (par exemple n=1 pour a="&12345;") est telle que (a+b)[i+n]=b[i]
Les types entiers et flottants sont bien séparés
Hippopotame (./834) :Pollux (./833) :
Moi je dis simplement que, si tu sors du modèle ASCII pur (0<=caractère<255) il n'y a pas d'isomorphisme satisfaisant entre chaînes de caractères et chaînes binaires (i.e. qui ne casse pas des propriétés importantes des chaînes de caractères)
Nan mais d'accord.Une chaîne d'octets, oui, une chaîne de caractères, ça dépend de l'encodage...
Il existe un encodage pour le quel c'est une chaîne de c., et puis voilà.Mais on s'en fout de la longueur binaire de la chaîne ou bien de la position binaire d'un caractère...
Ben non, pas moi !
Comment je ferais un XOR sinon ??C'est pas clair du tout et surtout ça fait n'importe quoi : tu dois abandonner au moins une de ces propriétés :
- le XOR de 2 chaînes valides est tjs une chaîne valide
- la concaténation de 2 chaînes a et b, où a a une longueur de n caractères (par exemple n=1 pour a="&12345;") est telle que (a+b)[i+n]=b[i]
Ah oui d'accord mais parce que tu veux te placer dans des encodages compliqués. Mais si c'est pas une chaîne tétratomique-compliant on s'en fout.Les types entiers et flottants sont bien séparés
Et mon cul c'est du poulet.
Hippopotame (./834) :
Il existe un encodage pour le quel c'est une chaîne de c., et puis voilà.
[/mode])Hippopotame (./834) :
Ben non, pas moi ! Comment je ferais un XOR sinon ??
Hippopotame (./834) :
Ah oui d'accord mais parce que tu veux te placer dans des encodages compliqués. Mais si c'est pas une chaîne tétratomique-compliant on s'en fout.
Hippopotame (./834) :
Et mon cul c'est du poulet.
~ $ > hippo.c
int main() {
double x = 42;
float y = x/3;
return y;
}
~ $ lint hippo.c
Splint 3.1.1 --- 02 May 2003
hippo.c: (in function main)
hippo.c:3:15: Variable y initialized to type double, expects float: x / 3
To allow all numeric types to match, use +relaxtypes.
hippo.c:4:12: Return value type float does not match declared type int: y
Finished checking --- 2 code warnings(a.to_binary(UTF8) ^ b.to_binary(UTF8)).to_string(UTF8)
(par exemple) Et ça a l'avantage de faire apparaître clairement ta contrainte tordue "une chaîne de 1 caractère unicode ne peut être XORée qu'avec une chaîne de 6 caractère ascii", ou bien le fait que le décodage UTF8 peut échouer...
(et évidemment que je me place dans des encodages compliqués, c'est la seule raison pour laquelle une chaîne serait autre chose qu'un tableau d'octets)
Ben par défaut C te fait pas chier et est relativement permissif, mais (...)
Hippopotame (./838) :
Brèfle si toi tu veux appeler chaîne de caractères tes machines de haut niveau avec encodage, et dont les unités de base sont des caractères qui moralement ne sont pas des octets, alors fort bien mais j'ai besoin de chaînes d'octets, que j'appellerai chaînes de caractères dans le privé, et je peste contre le fait qu'on a imposé à ces chaînes d'octets d'être à zéro terminal.
)Ben par défaut C te fait pas chier et est relativement permissif, mais (...)
Ben par défaut C te fait pas chier et est relativement permissif.
(et puis si d'ailleurs, même en étant permissif il fait chier.)