我有一个简单的字节数组操纵字节数组
["\x01\x01\x04\x00"]
我不知道我怎样才能改变字符串中(我知道数组只有一个项目)只在第二个价值,同时仍保持该对象是一个字节数组。
东西沿着这些路线:
["\x01#{ARGV[0]}\x04\x00"]
我有一个简单的字节数组操纵字节数组
["\x01\x01\x04\x00"]
我不知道我怎样才能改变字符串中(我知道数组只有一个项目)只在第二个价值,同时仍保持该对象是一个字节数组。
东西沿着这些路线:
["\x01#{ARGV[0]}\x04\x00"]
我认为秘诀就在于你有一个嵌套的数组:
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"]
使用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"
>>
没有等待......我不认为我和我一样清晰本来可以的,我只想替换第二个值,它是字节数组的一部分,所以它会以字节的形式输出......也许我只是离开了......尽管你可能有完美的答案。 +1 – 2009-10-17 07:19:59
@jpsilvashy:如果您将上述信息添加到问题中,会很好。原来的一个有点模糊。 – 2009-10-17 07:23:56
好的,对我的原创作了一些修改,感谢@ o.k.w。 +1 – 2009-10-17 07:32:57
这可能是减少混乱摆脱阵列封装的。
a = ["\x01\x01\x04\x00"]
a = a[0]
a[1] = ...
您可以随时把字符串返回内部数组:
a = [a]
而且,从技术上讲,它不是一个“字节数组”,这是一个单元素数组,一个String对象。 (对于这个问题,严格来说,Ruby并不真的有类型的数组;所有的Ruby数组在其他地方都是Array of Object
)。
嘿!这也是一个非常棒的解决方案。使字符串更易于管理。感谢您对Ruby中的Arrays的洞察。 +1 – 2009-10-17 08:29:29
哇,谢谢布伦特,这个作品各不相同,谢谢优雅的解决方案,以我的简单小问题。 – 2009-10-17 08:20:08