2009-10-17 6 views
0

J'ai un tableau d'octets simplesManipuler un tableau d'octets

["\x01\x01\x04\x00"] 

Je ne sais pas comment je peux modifier seulement la deuxième valeur dans la chaîne (je sais que le tableau a un seul élément), tout en restant en gardant l'objet un tableau d'octets.

Quelque chose le long de ces lignes:

["\x01#{ARGV[0]}\x04\x00"] 

Répondre

4

Je pense que le secret est que vous avez un tableau imbriqué:

irb(main):002:0> x = ["\x01\x02\x01\x01"] 
=> ["\001\002\001\001"] 

Vous pouvez indexer il:

irb(main):003:0> x[0][1] 
=> 2 

Vous pouvez attribuer en elle:

irb(main):004:0> x[0][1] = "\x05" 
=> "\005" 

Et il ressemble à ce que vous voulez:

irb(main):005:0> x 
=> ["\001\005\001\001"] 
+0

Wow, merci Brent, ce travail varie bien, merci pour la solution élégante à mon petit problème simple. –

2

utiliser la méthode de chaîne each_byte:

$ irb --simple-prompt 
>> str = "\x01\x01\x04\x00" 
=> "\001\001\004\000" 
>> str.each_byte {|byte| puts byte} 
1 
1 
4 
0 
=> "\001\001\004\000" 
>> 
+0

pas d'attente ... Je ne pense pas que j'étais aussi clair que, (tous les tableaux Ruby sont quelque chose comme Array of Object ailleurs. Et d'ailleurs, à proprement parler, Ruby n'a pas vraiment tableau de type) aurait pu être, je veux juste remplacer la deuxième valeur, tout cela fait partie d'un tableau d'octets, donc il sera sorti en octets de toute façon ... peut-être que je suis juste loin ... vous pouvez avoir la réponse parfaite cependant. +1 –

+1

@jpsilvashy: Serait bon si vous ajoutez l'information ci-dessus dans la question. L'original est un peu vague. –

+1

ok, fait quelques changements à mon original, merci @ o.k.w. +1 –

1

Il est peut-être moins confus pour se débarrasser de l'enveloppe de tableau.

a = ["\x01\x01\x04\x00"] 
a = a[0] 

a[1] = ... 

Vous pouvez toujours mettre la chaîne à l'intérieur d'un tableau:

a = [a] 

De plus, techniquement, ce n'est pas un « tableau d'octets », il est un tableau à un seul élément, avec un objet String.

+0

Salut! C'est vraiment une très bonne solution. Rend la chaîne plus maniable. Merci pour l'aperçu sur Arrays en Ruby. +1 –

Questions connexes