Comment concaténer des octets dans Crystal


Samuel

Je teste la sérialisation avec des octets ou des tranches, juste en apprenant et en essayant. Je voudrais lier 3 paramètres dans un seul champ de 10 octets, mais je ne sais pas maintenant comment les concaténer dans Crystal ou si c'est possible. Je sais que je peux y parvenir en créant des tableaux ou des tuples, mais je veux essayer de savoir s'il est possible de mélanger les paramètres dans un seul tampon.

Par exemple, je veux un ID d'enregistrement binaire auto-descriptif mélangeant 3 paramètres:

Type (UInt8) | Catégorie (UInt8) | Microsecondes (UInt64) = Total 80 bits - 10 octets

type = 1_u8 # 1 byte
categ = 4_u8 # 1 byte
usec = 1527987703211000_u64 # 8 bytes (Epoch)

Comment concaténer toutes ces variables dans un tampon continu de 10 octets?

Je veux récupérer les données par l'index, comme:

type = buff[0,1]
categ = buff[1,1]
usec = buff[2,8].to_u64 # (Actually not possible)
Par Prypin
typ = 1_u8 # 1 byte
categ = 4_u8 # 1 byte
usec = 1527987703211000_u64 # 8 bytes (Epoch)

FORMAT = IO::ByteFormat::LittleEndian

io = IO::Memory.new(10)  # Specifying the capacity is optional

io.write_bytes(typ, FORMAT)  # Specifying the format is optional
io.write_bytes(categ, FORMAT)
io.write_bytes(usec, FORMAT)

buf = io.to_slice
puts buf

# --------

io2 = IO::Memory.new(buf)

typ2 = io2.read_bytes(UInt8, FORMAT)
categ2 = io2.read_bytes(UInt8, FORMAT)
usec2 = io2.read_bytes(UInt64, FORMAT)

pp typ2, categ2, usec2
Bytes[1, 4, 248, 99, 69, 92, 178, 109, 5, 0]
typ2   # => 1_u8
categ2 # => 4_u8
usec2  # => 1527987703211000_u64

Ceci montre un exemple adapté à votre cas d'utilisation, mais IO::Memorydevrait être utilisé pour "concaténer des octets" en général - il suffit d'écrire dessus.

Articles connexes


Comment concaténer des octets ensemble

Rayon Voici l'extrait de code: - join_values = [] new_byteArray = [128, 0, 0, 0, 86, 70, 124, -96] for values in byteArray: values = long(values) store_values = struct.pack('!q', values) join_values.append(store_values) print join_values Cela prod

Rust : comment concaténer des octets ensemble

Antonin GAVREL J'ai déjà lu le lien suivant mais j'obtiens toujours des erreurs avec ma tentative actuelle : let data = &[37u8, 42u8]; let data_two = &[0x34u8, 0x32u8]; let res:Vec<u8> = [data, data_two].concat(); De plus, idéalement, je voudrais éviter la co

reactJS - Comment concaténer dans des accessoires?

StackUnderFlow Essayer d'ajouter une classe span à côté du prix de 25 dans les accessoires de description ci-dessous. Y a-t-il un moyen que je puisse ajouter correctement dans une étendue là-bas. Obtention actuelle de [objet objet] lors de l'exécution du code

comment concaténer des vecteurs dans Eigen?

user3178756 J'ai deux vectorXd dans mon programme et j'aime les concaténer en un seul vecteur, de sorte que les valeurs du second aille après le premier, j'ai trouvé ceci pour la matrice mais cela ne semble pas fonctionner sur les vecteurs: Eigen comment conca

Comment concaténer des tableaux dans bash?

Enamul Hassan | Je suis nouveau à Bash. J'ai un tableau prenant l'entrée de l'entrée standard. Je dois me concaténer deux fois. Dites, j'ai les éléments suivants dans le tableau: Namibia Nauru Nepal Netherlands NewZealand Nicaragua Niger Nigeria NorthKorea Nor

Comment concaténer des listes dans Rcpp

SeGa Je veux c()2 listes dans Rcpp, mais j'ai du mal à obtenir la même structure que je le ferais dans R. Voici quelques données simples + exemple: rlist = list(a = "123") listadd = list(typ = "fdb") c(rlist, listadd) ce qui me donne ceci: $a [1] "123" $typ

Comment concaténer des entiers dans BigQuery?

Je suis riche J'ai besoin de concaténer deux chaînes, year et Quarter, qui sont structurées comme suit: Year | Q 2007 | 1 2008 | 2 2005 | 4 J'ai essayé le code suivant: update `Project.MACRO.Table` set YearQuarter = CAST(year as string) + '_' + CAST(qua