Quelqu'un peut-il m'expliquer ce que le flux d'octets contient réellement? Contient-il des octets (données hexadécimales) ou des données binaires ou des lettres anglaises uniquement? Je suis également confus quant au terme "données brutes". Si quelqu'un me demande "d'inverser les données sur 4 octets", alors que devrais-je supposer que les données sont du code hexadécimal ou du code binaire?
stream-processing
utilisateur2720323
la source
la source
Réponses:
Les flux d'octets contiennent, ainsi, des octets. Décomposé en ce qu’il est en réalité, il s’agit de 8 bits composés de 1 et de 0. S'il s'agissait d'un nombre, ce serait n'importe quel nombre compris entre 0 et 255 (ce qui, permettez-moi d'ajouter, n'est pas une coïncidence si les 4 chiffres d'une adresse IP vont toujours de 0 à 255). Les flux d' octets sont généralement des interfaces sophistiquées destinées à masquer le tableau d'octets de base sous-jacent utilisé pour contenir un tampon circulaire (vous remplissez le tampon et attendez que quelqu'un le vide, puis il remplit simplement à nouveau le tampon).
Qu'est-ce que ça représente? Cela pourrait représenter un fichier texte, une image ou un flux vidéo en direct. Ce qu'il est dépend entièrement du contexte de qui est lu. La représentation hexadécimale est une autre façon de dire la même chose, bien qu'il soit parfois plus pratique de gérer les octets en termes de représentation hexadécimale plutôt qu'en chiffres, mais c'est 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 en octets. Les données sont fournies sans étiquette indiquant "Je suis un fichier image!" Habituellement, vous ne traitez que des données brutes lorsque vous ne vous souciez pas vraiment de ce que les données représentent globalement. Par exemple, si je voulais convertir une image en version noir et blanc, je pourrais peut-être lire les données brutes d'une image et pour chaque lecture de 3 octets (ce qui serait en fait une représentation de la couleur rouge, une représentation de la couleur verte et une représentation de l'image). couleur bleue), ajoutez sa valeur numérique et divisez-la par 3, puis écrivez cette valeur 3 fois. Essentiellement, je ferais la moyenne des valeurs de rouge, de vert et de bleu d'un pixel pour en faire son pixel équivalent gris. Cependant, lorsque vous parlez d'effectuer des opérations sur des données au niveau "octet par octet", vous ne
Ou peut-être souhaitez-vous enregistrer un fichier dans une base de données, mais il vous est demandé d'insérer ses "données brutes" dans un type de données blob. Cela signifie simplement convertir les données d'un fichier en un tableau d'octets volumineux que la base de données peut comprendre et gérer. Vous constaterez que lorsque vous récupérerez cette valeur dans la base de données, il s'agira simplement d'un tableau d'octets volumineux tel que vous l'aviez initialement fourni à la base de données. Si ces données étaient un fichier, vous, le programmeur, devez réinterpréter ces données d'octet comme si vous lisiez un fichier octet à la fois.
Si quelqu'un vous demandait d '"inverser les données sur 4 octets", je suppose que cela fait référence à une interprétation big-endian vs little-endian des nombres, qui écrit les nombres commençant par l'octet le plus ou le moins significatif. Peu importe si un nombre est représenté en tant que big-endian ou little-endian, tous les systèmes qui le lisent l’interprètent de manière cohérente.
Cela ne veut pas dire que la représentation du nombre réel (ou la représentation hexadécimale est changée), mais simplement que l'ordre dans lequel ces 4 octets font un nombre doit être inversé. Alors disons que vous avez 0x01, 0x02, 0x03 et 0x04. Pour inverser cela, vous auriez plutôt 0x04, 0x03, 0x02, 0x01. Le système lirait probablement ces 4 octets dans l’ordre inverse et, comme vous l’avez déjà inversée, la valeur est interprétée comme étant identique à celle prévue dans les données brutes.
J'éspère que ça l'explique!
la source
Un octet est simplement une unité d'information - cela peut être n'importe quoi. Un octet en soi ne veut rien dire, vous devez lui attribuer un sens.
Alors, pour développer cela -
Les données hexadécimales sont identiques aux données binaires. C'est juste une façon différente d'afficher les données. Par exemple, 0x41 = 0b01000001 = 'A' = 65 (décimal). Les lettres anglaises ne seraient qu'un sous-ensemble de cela.
Puisque hex est juste une représentation des données, peu importe comment vous y pensez. Si vous avez des données de
0x65 0x66 0x67 0x68
, pour l’inverser, vous obtiendrez0x68 0x67 0x66 0x65
. Si vous examiniez ces données en termes de caractères, vous les auriez à l’origineA B C D
, mais vous l’avez maintenantD C B A
.Retour à un flux d'octets - c'est juste une séquence de données. Vous devez savoir ce que les données représentent pour pouvoir les utiliser. Si nous lisons un fichier texte, le flux d'octets que vous obtiendriez lorsque vous le liriez ne serait que des caractères. Un fichier exécutable aurait un tas de caractères non imprimables, raison pour laquelle il s’appellerait un fichier binaire . Clairement, il est possible d’ouvrir un fichier exécutable dans un éditeur de texte, mais cela n’a aucune utilité.
la source
int reverseX = ((x & 0xFF000000) >> 24) + ((x & 0x00FF0000) >> 8) + ((x & 0x0000FF00) << 8) + ((x & 0x000000FF) << 24);
Cela prend littéralement chaque octet, le décale dans la bonne position et se combine avec les autres.Un flux d'octets est une séquence d'octets ordonnée. Il y a un premier octet, qui n'a 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 composé de huit bits. Si nous voulons être plus précis, nous utilisons le terme flux et octet octet . Il existe toujours des ordinateurs avec des octets dont la largeur n’est pas de huit bits.
Hexadécimal est un moyen d'écrire des nombres et sert de représentation imprimée pour les données binaires. Hexadécimal est en fait un texte. Par exemple, la valeur hexadécimale
FE
peut représenter un octet: les bits11111110
qui ont la valeur décimale255
. Cependant, ilFE
s’agit en réalité d’une chaîne de caractères composée des caractèresF
etE
, qui nécessite deux octets dans le jeu de caractères US-ASCII ou ISO-646! Ces deux octets sont ce quiFE
est , et le seul octet avec la valeur 254 est ce queFE
représente , en tant que notation imprimée.Si un canal de communication, un descripteur de fichier ou un périphérique de ce type est décrit comme transportant un flux d'octets, et qu'aucune autre information n'est donnée, cela ne signifie certainement pas que les octets sont représentés sous forme de texte hexadécimal, de sorte que chaque octet abstrait du flux nécessite deux octets physiques.
Et les données brutes désignent simplement les bits qui ne sont pas interprétés comme ayant une structure au-delà du "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, nous ignorons l'interprétation pour le moment (par exemple, nous examinons la représentation brute d'un type de données pour en vérifier l'exactitude. au niveau des bits), ou l’interprétation n’est pas disponible (nous avons des données, mais nous ne comprenons pas la structure des données et ce qu’elle représente).
la source
Un octet est 8 bits. Un bit vaut 0 ou 1. La "donnée brute" est simplement un flux d'octet après l'autre. Un flux d'octets peut provenir d'un fichier, d'une connexion réseau, d'un objet sérialisé, d'un générateur de nombres aléatoires, etc.
Il existe plusieurs manières d'afficher un octet: binaire (01110110), hex = hexidécimal (7C), octal (0271) ou décimal (215). Dans tous les cas, la valeur maximale est de 255 (base 10).
Parfois, des octets sont attribués à des caractères, comme ascii. Tapez "ascii" sur une ligne de commande unix et vous obtiendrez un grand tableau qui mappera les valeurs d'octet 0-255 ou (0-FF hex) au caractère associé. Par exemple, l'espace est x20 et "A" est x40. Notez que certaines valeurs d'octet 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 qu'un paquet de bits. Un numéro.
"inverser 4 octets" consisterait à prendre quelques octets 123 42 231 0 et à inverser la commande - 0 231 42 123. Appliqué à un octet steam, je lirais probablement 4 octets, inverserais-le, lirais les 4 octets suivants, etc. .
(BTW, ce problème est pertinent, car si vous voulez représenter un nombre supérieur à 255, vous devez utiliser plus d'un octet. Mais la question est de savoir si le "plus grand" octet vient en premier ou en dernier? big endian ou little endian - recherchez-les plus en détail sur l’utilité de mélanger les octets dans un flux d’octets brut.)
la source