我有一个简单的字节数组
["\x01\x01\x04\x00"]
我不知道如何改变字符串中的第二个值(我知道数组只有一个项目),同时仍然保持对象为字节数组。
这些方面的东西:
["\x01#{ARGV[0]}\x04\x00"]
答案 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
。)