2009-10-17 63 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