操作字节数组

时间:2009-10-17 07:12:01

标签: ruby string

我有一个简单的字节数组

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

我不知道如何改变字符串中的第二个值(我知道数组只有一个项目),同时仍然保持对象为字节数组。

这些方面的东西:

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

3 个答案:

答案 0 :(得分: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"]

答案 1 :(得分: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"
>>

答案 2 :(得分:1)

摆脱数组包装器可能不那么容易混淆。

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

a[1] = ...

您始终可以将字符串放回数组中:

a = [a]

另外,从技术上讲,它不是一个“字节数组”,它是一个单元素数组,带有一个String对象。 (就此而言,严格来说,Ruby并不真正拥有 Type of Type ;所有Ruby数组都类似于其他地方的Array of Object。)