Quest-ce quun flux doctets?

Quelquun peut-il mexpliquer ce que contient réellement le flux doctets? Contient-il des octets (données hexadécimales) ou des données binaires ou des lettres anglaises uniquement? Je suis également confus au sujet du terme «données brutes». Si quelquun ma demandé de « renverser les données de 4 octets », que dois-je supposer que les données sont du code hexadécimal ou du code binaire?

Commentaires

  • Mes deux cents ne sont pas dignes de réponse (et il y en a déjà de bons ci-dessous) mais je veux juste fournir des liens vers ces 2 articles qui fourniront probablement de bonnes informations sur la façon dont  » les données brutes  » est interprété comme signifiant réellement quelque chose (cela ne signifie rien ‘ si vous ne savez pas ce quil est censé représenter et comment il est encodé / stocké) betterexplained.com/articles/… joelonsoftware. com / articles / Unicode.html
  • Je pense que java a créé un octet pour éviter dutiliser le caractère de c / c ++ ‘ pour les choses qui peuvent ‘ t être compris comme un caractère. char était beaucoup utilisé en c / c ++ car la taille de char est de 1 octet. Les périphériques sous Unix sont également des périphériques bloc et caractère. Si vous lisez à partir de périphériques char, vous obtenez un flux de caractères / octets non signés.
  • Le flux doctets est ambigu. Le flux doctets ne lest pas.
  • Les données peuvent être interprétées à plusieurs niveaux. En bas, il ‘ est juste une série de niveaux électriques tout ou rien. Un peu plus haut, ‘ est un bloc doctets, ou comme vous le dites, un flux doctets . Encore plus haut, vous commencez à interpréter les données brutes. Les octets peuvent être interprétés comme du texte de plusieurs manières (encodages). Les nombres entiers aussi (grand ou petit boutien). Vous pouvez même monter plus haut. Vous avez un fichier zip. Ce fichier zip est votre sauvegarde dhier. Etc. Le problème est que le niveau exact est souvent implicite et nest pas précisé, ce qui peut prêter à confusion.

Réponse

Les flux doctets contiennent, enfin, des octets. Décomposé en ce quil est réellement, il sagit de 8 bits composés de 1 et de 0. Sil représentait un nombre, ce serait nimporte quel nombre compris entre 0 et 255 (ce qui, je puis ajouter, nest pas un hasard si les 4 nombres dune adresse IP vont toujours de 0 à 255). Les flux doctets sont généralement des interfaces sophistiquées destinées à masquer le tableau doctets de base sous-jacent utilisé pour contenir un tampon circulaire (vous remplissez le tampon et attendez que quelquun le vide, auquel moment il remplit simplement le tampon. de nouveau).

Quest-ce que ça représente? Eh bien, cela pourrait représenter un fichier texte, une image ou un flux vidéo en direct. Ce quil est dépend entièrement du contexte de celui qui le lit. La représentation hexadécimale est une autre façon de dire la même chose, bien quil soit parfois plus pratique de gérer les octets en fonction de leur représentation hexadécimale plutôt que des nombres, mais cest la même chose.

Lorsque vous « faites référence à des données brutes, vous faites généralement référence à des données doctets. Les données sont livrées sans balise indiquant » Je suis un fichier image! « En général, vous ne traitez avec des données brutes que lorsque vous ne le faites pas. t vraiment ce que les données représentent globalement. Par exemple, si je voulais convertir une image en sa version noir et blanc, je pourrais dire de lire les données brutes dune image et pour chaque 3 octets lus (ce qui serait en fait une représentation de la couleur rouge, une représentation de la couleur verte, et représentation de la couleur bleue), ajoutez sa valeur numérique et divisez par 3, puis écrivez cette valeur 3 fois. Essentiellement, ce que je ferais est de calculer la moyenne des valeurs rouge, verte et bleue dun pixel et den faire le pixel équivalent gris Cependant, lorsque vous parlez d’exécuter des opérations sur des données au niveau «octet par octet», vous ne vous souciez pas vraiment de la vue d’ensemble, pour ainsi dire.

Ou peut-être souhaitez-vous enregistrer un fichier dans une base de données, mais il vous demande dinsérer ses « données brutes » dans un type de données blob. Cela signifie simplement convertir les données dun fichier en un grand tableau doctets que la base de données peut comprendre et gérer. Vous constaterez que lorsque vous récupérez cette valeur de la base de données, ce sera simplement un grand tableau doctets comme vous lavez initialement fourni à la base de données. Si ces données étaient un fichier, alors vous, le programmeur, devez réinterpréter cet octet données comme si vous lisiez un fichier un octet à la fois.

Si quelquun vous demandait « dinverser les données de 4 octets », je suppose que cela fait référence à linterprétation big-endian vs little-endian des nombres , qui écrit les nombres en commençant par loctet le plus ou le moins significatif. Peu importe si un nombre est représenté comme big-endian ou little-endian, juste que tous les systèmes lisant le nombre linterprètent de manière cohérente.

Ceci nest pas de dire que la représentation numérique réelle (ou la représentation hexadécimale dailleurs) est modifiée, simplement que lordre dans lequel ces 4 octets forment un nombre doit être inversé. Supposons que vous ayez 0x01, 0x02, 0x03 et 0x04.Pour les inverser, vous avez 0x04, 0x03, 0x02, 0x01 à la place. Le système lira vraisemblablement ces 4 octets dans lordre inverse et puisque vous lavez déjà inversé, la valeur est interprétée comme étant la même que celle qui était prévu dans les données brutes.

Jespère que cela explique!

Commentaires

  • Tout va bien ..! Pouvez-vous préciser la réponse en tenant compte des  » données brutes « ?
  • @ user2720323 OK, modifié pour mieux expliquer  » données brutes.  » 🙂
  • Une chose à garder à lesprit … toutes les données sont simplement une collection doctets. La signification de ces octets est définie par une sorte de métadonnées (extension de fichier, champ de base de données, etc.). Un fichier image peut être interprété comme un fichier ASCII et vice-versa. Le texte ou limage na peut-être pas de sens, mais cest toujours possible. (Derp … jaurais dû lire les réponses suivantes)
  • @kevincline Veuillez essayer dapprécier le fait que ‘ essaie de transmettre une idée. Ma priorité nest pas ‘ t décrire un algorithme précis. Si vous vouliez être plus précis, vous ‘ pesez les valeurs rouge, vert et bleu en fonction de ce que l’œil humain peut percevoir.

Réponse

Un octet est simplement une unité dinformation – il peut être nimporte quoi. Un octet en lui-même ne veut rien dire, vous devez lui attacher une sorte de signification.

Donc, pour développer cela –

Contient-il des octets (données hexadécimales) ou des données binaires ou des lettres anglaises uniquement?

Les données hexadécimales sont identiques aux données binaires. est juste une manière différente dafficher les données. Par exemple, 0x41 = 0b01000001 = « A » = 65 (décimal). Les lettres anglaises nen seraient quun sous-ensemble.

Si quelquun me demandait de « renverser les 4 octets », que devrais-je supposer que les données sont code hexadécimal ou code binaire?

Puisque hexadécimal est juste une représentation des données, peu importe ce que vous pensez à ce sujet. Si vous avez des données de 0x65 0x66 0x67 0x68, pour les inverser, vous obtiendrez 0x68 0x67 0x66 0x65. Si vous regardiez ces données en termes de caractères, vous auriez à lorigine A B C D, mais maintenant vous avez D C B A.

Retour à un flux doctets – il « est juste une séquence de données. Vous devez savoir ce que représentent les données pour pouvoir les utiliser. Si nous lisons un fichier texte, le flux doctets que vous obtiendrez lorsque vous lirez le fichier ne serait que des caractères dune certaine sorte. Un fichier exécutable contiendrait un tas de caractères non imprimables, cest pourquoi il serait appelé un fichier binaire . De toute évidence, il est possible douvrir un exécutable dans un éditeur de texte, mais cela ne fait rien dutile.

Commentaires

  • +1 mais laccent mis sur binaire dans le bit lat semble déplacé.  » les données binaires  » contiennent souvent des caractères non imprimables, mais elles ‘ sont appelées  » binaire  » parce quil ‘ est composé de chiffres binaires, pas parce quil contient des caractères non imprimables . Je comprends que vous ‘ utilisez  » binaire  » par opposition à  » text  » données, mais je pense que cela peut encore plus perturber le PO.
  • Jai une question concernant linversion. Si jai un entier (32 bits) 325487 dans un fichier, comment puis-je inverser cet entier de 4 octets? de même, jai un mot ( » hai comment allez-vous « ), comment inverser cette chaîne en prenant chaque caractère comme un octet.
  • @ user2720323 int reverseX = ((x & 0xFF000000) >> 24) + ((x & 0x00FF0000) >> 8) + ((x & 0x0000FF00) << 8) + ((x & 0x000000FF) << 24); Cela prend littéralement chaque octet, le déplace à la bonne position et se combine avec les autres.

Réponse

Un flux doctets est une séquence ordonnée doctets. Il y a un premier octet, qui na pas de prédécesseur. Son successeur est le deuxième octet, et ainsi de suite. De nos jours, un octet est généralement compris comme étant composé de huit bits. Si nous voulons être plus précis, nous utilisons les termes flux doctets et octet . Il existe encore des ordinateurs dont les octets ne font pas huit bits de large.

Lhexadécimal est une manière décrire des nombres et sert de représentation imprimée pour les données binaires. Lhexadécimal est en fait du texte . Par exemple, la valeur hexadécimale FE peut représenter un octet: les bits 11111110 qui ont la valeur décimale 255.Cependant, FE est en fait une chaîne de caractères composée des caractères F et E, ce qui nécessite deux octets dans le jeu de caractères US-ASCII ou ISO-646! Ces deux octets correspondent à ce que FE est , et le seul octet avec la valeur 254 est ce que le FE représente , sous forme de notation imprimée.

Si un canal de communication, un descripteur de fichier ou un dispositif similaire est décrit comme transportant un flux doctets, et aucune autre information nest donnée, cela signifie presque certainement pas que les octets sont représentés sous forme de texte hexadécimal , de sorte que chaque octet abstrait dans le flux nécessite deux octets physiques.

Et les données brutes désignent simplement des bits qui ne sont pas interprétés comme ayant une structure au-delà du simple « tableau de bits ». Les données brutes ont généralement une structure et représentent quelque chose, mais lorsque nous les considérons comme des données brutes, soit nous ignorons linterprétation pour le moment (par exemple, nous examinons la représentation brute dun type de données pour vérifier son exactitude. au détail au niveau du bit), ou linterprétation nest pas disponible (nous avons des données, mais nous ne comprenons pas la structure des données et ce quelles représentent).

Commentaires

  • Le PDP-10 avait des instructions pour traiter les octets de taille variable. Le plus courant était lASCII à sept bits, suivi de caractères à six bits.

Réponse

Un octet vaut 8 morceaux. Un bit vaut 0 ou 1. Les « données brutes » ne sont quun flux dun octet après lautre. Un flux doctets peut provenir dun fichier, dune connexion réseau, dun objet sérialisé, dun générateur de nombres aléatoires, etc.

  • Il existe plusieurs façons dafficher un octet: binaire (01110110) , hex = hexadécimal (7C), octal (0271) ou décimal (215). Dans tous les cas, la valeur maximale est de 255 (base 10).

  • Parfois, des octets sont affectés à des caractères, comme ascii. Tapez « ascii » sur une ligne de commande unix, et vous « obtiendrez un grand tableau qui mappe les valeurs doctet 0-255 ou (0-FF hex) au caractère associé. Par exemple, lespace est x20 et » A « est x40 Notez que certaines valeurs doctets correspondent aux caractères de contrôle et ne sont pas imprimables. Mais les octets eux-mêmes ne sont pas des caractères – ils « ne sont quun paquet de bits. Un nombre.

  • « inverser 4 octets » serait prendre quelques octets 123 42 231 0 et inverser lordre – 0 231 42 123. Appliqué à un byte steam, je « d probablement lire 4 octets, les inverser, lire les 4 octets suivants, etc.

(BTW ce problème est pertinent, car si vous voulez représenter un nombre plus grand que 255 comme byes, vous devez utiliser plus dun octet. Mais alors la question est de savoir si le « plus gros » octet vient en premier ou en dernier? Cela sappelle big endian ou little endian – recherchez-les pour en savoir plus sur pourquoi il est utile de mélanger les octets dans un flux doctets bruts.)

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *