我有一個簡單的字節數組操縱字節數組
["\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