2009-10-17 55 views
0

我有一个简单的字节数组操纵字节数组

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

我不知道我怎样才能改变字符串中(我知道数组只有一个项目)只在第二个价值,同时仍保持该对象是一个字节数组。

东西沿着这些路线:

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

回答

4

我认为秘诀就在于你有一个嵌套的数组:

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

你可以索引它:

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

您可以分配到其中:

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

它看起来像你想要什么:

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

哇,谢谢布伦特,这个作品各不相同,谢谢优雅的解决方案,以我的简单小问题。 – 2009-10-17 08:20:08

2

使用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

没有等待......我不认为我和我一样清晰本来可以的,我只想替换第二个值,它是字节数组的一部分,所以它会以字节的形式输出......也许我只是离开了......尽管你可能有完美的答案。 +1 – 2009-10-17 07:19:59

+1

@jpsilvashy:如果您将上述信息添加到问题中,会很好。原来的一个有点模糊。 – 2009-10-17 07:23:56

+1

好的,对我的原创作了一些修改,感谢@ o.k.w。 +1 – 2009-10-17 07:32:57

1

这可能是减少混乱摆脱阵列封装的。

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

a[1] = ... 

您可以随时把字符串返回内部数组:

a = [a] 

而且,从技术上讲,它不是一个“字节数组”,这是一个单元素数组,一个String对象。 (对于这个问题,严格来说,Ruby并不真的有类型的数组;所有的Ruby数组在其他地方都是Array of Object)。

+0

嘿!这也是一个非常棒的解决方案。使字符串更易于管理。感谢您对Ruby中的Arrays的洞察。 +1 – 2009-10-17 08:29:29